summaryrefslogblamecommitdiff
path: root/src/main/Particle.h
blob: d5a600da3bc4ea4f84571c97e784c0d9fee22992 (plain) (tree)
1
2
3
4
5
6
7
8
9
10









                           
                  
                 
                     
                      
                      


               
                                       
                                                  
                                  

        

                                           
                          



                                          
                                                     
                       
 
                                        
                    

                                         
                      
 

                      
       
 
 

                                                                       





                                          






                                                                                                                  
                                                                                      

          

                                                       

                                                       
                                                      

                                                               
                                                                 

                                                 
                                                                
                                                     
 

                                                               
 

                                                    
 

                                                     
 


                                                       




                                                                         
                                                                          

                                      





                                                                

                               
 




                        
/*
 * Particle.h
 *
 *  Created on: Mar 9, 2011
 *      Author: jakob
 */

#ifndef PARTICLE_H_
#define PARTICLE_H_

#include <sstream>
#include <math.h>
#include "Vector3D.h"
#include "Printable.h"
#include "constants.h"

namespace vhc {

/** Classe représentant une particule.
 * TODO poser question sur l'energie, gamma, qdm*/
class Particle: public Printable {

private:

	/** Position de cette particule. */
	Vector3D position;

	/** Vitesse de cette particule. */
	Vector3D velocity;

	/** Force résultante sur cette particule. */
	Vector3D force;

	/** Masse de cette particule. */
	double mass;

	/** Charge de cette particule. */
	double charge;

	double energy;

public:


	Particle(const Vector3D& position, double mass, double charge):
			position(position),
			velocity(0, 0, 0),
			force(0, 0, 0),
			mass(mass),
			charge(charge)
	{};

	Particle(const Vector3D& position0, double energy, const Vector3D& direction, double mass, double charge):
		position(position),
		velocity(0, 0, 0),
		force(0, 0, 0),
		mass(mass),
		charge(charge) {

		velocity = constants::c * sqrt(1 - (mass * mass) / (energy * energy));
	};


	/** Retourne la position de cette particule. */
	Vector3D getPosition() const {return position;}

	/** Affecte la position de cette particule. */
	void setPosition(const Vector3D& pos) {position = pos;}

	/** Retourne la force résultante sur cette particule. */
	Vector3D getForce() const {return force;}

	/** Affecte la force résultante sur cette particule. */
	void setForce(const Vector3D& f) {force = f;}

	/** Applique une force sur cette particule. */
	void applyForce(const Vector3D& f) {force = force + f;}

	/** Retourne la masse de cette particule. */
	double getMass() const {return mass;}

	/** Retourne la charge de cette particule. */
	double getCharge() const {return charge;}

	/** Retourne la vitesse de cette particule. */
	Vector3D getVelocity() const {return velocity;}

	//GeV
	double getEnergy() const {return energy;}

	double getGamma() const {return energy / (mass * constants::c2);}

	/** Retourne une représentation en chaîne de cette particule. */
	std::string toString() const {
		std::stringstream s;
		s << "Particle:"	<< "\n";
		s << "\tPosition: "	<< position	<< "\n";
		s << "\tVelocity: "	<< velocity	<< "\n";
		s << "\tMass: "		<< mass		<< "\n";
		s << "\tCharge: "	<< charge	<< "\n";
		s << "\tForce: "	<< force	<< "\n";
		return s.str();
	}

};

}

#endif /* PARTICLE_H_ */