00001 #ifndef BDSBunchInterface_h
00002 #define BDSBunchInterface_h
00003
00004 #include "globals.hh"
00005 #include "parser/options.h"
00006 #include "BDSGlobalConstants.hh"
00007
00008 namespace CLHEP {
00009 class HepRandomEngine;
00010 class HepSymMatrix;
00011 class HepVector;
00012 class RandMultiGauss;
00013 }
00014
00015 class BDSBunchInterface {
00016 protected :
00017
00018 G4double X0;
00019 G4double Y0;
00020 G4double Z0;
00021 G4double T0;
00022 G4double Xp0;
00023 G4double Yp0;
00024 G4double Zp0;
00025 G4double sigmaT;
00026 G4double sigmaE;
00027
00029
00030
00031 CLHEP::RandMultiGauss* CreateMultiGauss(CLHEP::HepRandomEngine & anEngine, const CLHEP::HepVector & mu, CLHEP::HepSymMatrix & sigma);
00032
00033 G4double CalculateZp(G4double xp, G4double yp, G4double Zp0)const;
00034
00035 public :
00036 BDSBunchInterface();
00037 BDSBunchInterface(G4double sigmaT, G4double sigmaE);
00038 BDSBunchInterface(G4double X0, G4double Y0, G4double Z0, G4double T0,
00039 G4double Xp0, G4double Yp0, G4double Zp0,
00040 G4double sigmaT, G4double sigmaE);
00041 virtual ~BDSBunchInterface();
00042 virtual void SetOptions(struct Options& opt);
00043 virtual void GetNextParticle(G4double& x0, G4double& y0, G4double& z0,
00044 G4double& xp, G4double& yp, G4double& zp,
00045 G4double& t , G4double& E, G4double& weight);
00046
00047 G4double GetX0() {return X0;}
00048 G4double GetY0() {return Y0;}
00049 G4double GetZ0() {return Z0;}
00050 G4double GetT0() {return T0;}
00051 G4double GetXp0() {return Xp0;}
00052 G4double GetYp0() {return Yp0;}
00053 G4double GetZp0() {return Zp0;}
00054 G4double GetSigmaE() {return sigmaE;}
00055 G4double GetSigmaT() {return sigmaT;}
00056 };
00057
00058 #endif