00001 #ifndef BDSBunchTwiss_h
00002 #define BDSBunchTwiss_h
00003
00004 #include "BDSBunchInterface.hh"
00005 #include "Randomize.hh"
00006 #include "CLHEP/Matrix/Vector.h"
00007 #include "CLHEP/Matrix/SymMatrix.h"
00008 #include "CLHEP/RandomObjects/RandMultiGauss.h"
00009
00010 class BDSBunchTwiss : public BDSBunchInterface {
00011
00012 private :
00013
00014 G4double betaX;
00015 G4double betaY;
00016 G4double alphaX;
00017 G4double alphaY;
00018 G4double emitX;
00019 G4double emitY;
00020 G4double gammaX;
00021 G4double gammaY;
00022
00023
00024
00025
00026 CLHEP::RandMultiGauss* GaussMultiGen;
00027
00028
00029 CLHEP::HepVector meansGM;
00030 CLHEP::HepSymMatrix sigmaGM;
00031
00032 public :
00033 BDSBunchTwiss();
00034 BDSBunchTwiss(G4double betaX, G4double betaY,
00035 G4double alphaX, G4double alphaY,
00036 G4double emitX, G4double emitY,
00037 G4double X0, G4double Y0, G4double Z0, G4double T0,
00038 G4double Xp0, G4double Yp0, G4double Zp0,
00039 G4double sigmaT, G4double sigmaE);
00040
00041 ~BDSBunchTwiss();
00042 void SetOptions(struct Options &opt);
00043 void CommonConstruction();
00044 void GetNextParticle(G4double& x0, G4double& y0, G4double& z0,
00045 G4double& xp, G4double& yp, G4double& zp,
00046 G4double& t , G4double& E, G4double& weight);
00047 G4double GetBetaX() {return betaX;}
00048 G4double GetBetaY() {return betaY;}
00049 G4double GetAlphaX() {return alphaX;}
00050 G4double GetAlphaY() {return alphaY;}
00051 G4double GetEmitX() {return emitX;}
00052 G4double GetEmitY() {return emitY;}
00053
00054 private:
00055 void SetBetaX(double newBetaX) {betaX = newBetaX;}
00056 void SetBetaY(double newBetaY) {betaY = newBetaY;}
00057 void SetAlphaX(double newAlphaX) {alphaX = newAlphaX;}
00058 void SetAlphaY(double newAlphaY) {alphaY = newAlphaY;}
00059 void SetEmitX(double newEmitX) {emitX = newEmitX;}
00060 void SetEmitY(double newEmitY) {emitY = newEmitY;}
00061 };
00062
00063 #endif