00001 #ifndef BDSBunchGaussian_h
00002 #define BDSBunchGaussian_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 BDSBunchGaussian : public BDSBunchInterface {
00011
00012 protected :
00013 G4double sigmaX;
00014 G4double sigmaY;
00015 G4double sigmaXp;
00016 G4double sigmaYp;
00017
00018 CLHEP::HepVector meansGM;
00019 CLHEP::HepSymMatrix sigmaGM;
00020
00021
00022 CLHEP::RandMultiGauss* GaussMultiGen;
00023
00024 public :
00025 BDSBunchGaussian();
00026 BDSBunchGaussian(G4double sigmaX, G4double sigmaY, G4double sigmaXp, G4double sigmaYp,
00027 G4double X0, G4double Y0, G4double Z0, G4double T0,
00028 G4double Xp0, G4double Yp0, G4double Zp0,
00029 G4double sigmaT, G4double sigmaE);
00030 BDSBunchGaussian(G4double *sigma,
00031 G4double X0, G4double Y0, G4double Z0, G4double T0,
00032 G4double Xp0, G4double Yp0, G4double Zp0,
00033 G4double sigmaT, G4double sigmaE);
00034 ~BDSBunchGaussian();
00035 void SetOptions(struct Options& opt);
00036 void GetNextParticle(G4double& x0, G4double& y0, G4double& z0,
00037 G4double& xp, G4double& yp, G4double& zp,
00038 G4double& t , G4double& E, G4double& weight);
00039
00040 G4double GetSigmaX() {return sigmaX;}
00041 G4double GetSigmaY() {return sigmaY;}
00042 G4double GetSigmaXp() {return sigmaXp;}
00043 G4double GetSigmaYp() {return sigmaYp;}
00044 G4double GetSigma(G4int i, G4int j) {return sigmaGM[i][j];}
00045
00046 protected:
00047 void SetSigmaX(G4double sigmaXIn) {sigmaX = sigmaXIn;}
00048 void SetSigmaY(G4double sigmaYIn) {sigmaY = sigmaYIn;}
00049 void SetSigmaXp(G4double sigmaXpIn) {sigmaXp = sigmaXpIn;}
00050 void SetSigmaYp(G4double sigmaYpIn) {sigmaYp = sigmaYpIn;}
00051 void SetSigma(G4int i, G4int j, G4double sigmaIn) {sigmaGM[i][j] = sigmaIn;}
00052 };
00053
00054 #endif