00001 #ifndef BDSBunchHalo_h
00002 #define BDSBunchHalo_h
00003
00004 #include "BDSBunchInterface.hh"
00005 #include "Randomize.hh"
00006 #include "CLHEP/Matrix/Vector.h"
00007
00008 namespace CLHEP {
00009 class RandFlat;
00010 }
00011
00012 class BDSBunchHalo : public BDSBunchInterface {
00013
00014 private :
00015
00016 G4double betaX;
00017 G4double betaY;
00018 G4double alphaX;
00019 G4double alphaY;
00020 G4double emitX;
00021 G4double emitY;
00022 G4double gammaX;
00023 G4double gammaY;
00024
00025 G4double envelopeX;
00026 G4double envelopeY;
00027 G4double envelopeXp;
00028 G4double envelopeYp;
00029
00030 CLHEP::RandFlat *FlatGen;
00031
00032 G4double weightParameter;
00033 std::string weightFunction;
00034
00035 public :
00036 BDSBunchHalo();
00037 BDSBunchHalo(G4double betaX, G4double betaY,
00038 G4double alphaX, G4double alphaY,
00039 G4double emitX, G4double emitY,
00040 G4double envelopeX , G4double envelopeY,
00041 G4double envelopeXp, G4double envelopeYp,
00042 G4double X0, G4double Y0, G4double Z0, G4double T0,
00043 G4double Xp0, G4double Yp0, G4double Zp0,
00044 G4double sigmaT, G4double sigmaE);
00045 ~BDSBunchHalo();
00046 void SetOptions(struct Options &opt);
00047 void GetNextParticle(G4double& x0, G4double& y0, G4double& z0,
00048 G4double& xp, G4double& yp, G4double& zp,
00049 G4double& t , G4double& E, G4double& weight);
00050
00051 G4double GetBetaX() {return betaX;}
00052 G4double GetBetaY() {return betaY;}
00053 G4double GetAlphaX() {return alphaX;}
00054 G4double GetAlphaY() {return alphaY;}
00055 G4double GetEmitX() {return emitX;}
00056 G4double GetEmitY() {return emitY;}
00057 G4double GetEnvelopeX() {return envelopeX;}
00058 G4double GetEnvelopeY() {return envelopeY;}
00059 G4double GetEnvelopeXp(){return envelopeXp;}
00060 G4double GetEnvelopeYp(){return envelopeYp;}
00061 G4double GetWeightParamer(){return weightParameter;}
00062 std::string GetWeightFunction() {return weightFunction;}
00063
00064
00065 protected:
00066 void SetBetaX(double newBetaX) {betaX = newBetaX;}
00067 void SetBetaY(double newBetaY) {betaY = newBetaY;}
00068 void SetAlphaX(double newAlphaX) {alphaX = newAlphaX;}
00069 void SetAlphaY(double newAlphaY) {alphaY = newAlphaY;}
00070 void SetEmitX(double newEmitX) {emitX = newEmitX;}
00071 void SetEmitY(double newEmitY) {emitY = newEmitY;}
00072 void SetEnvelopeX(G4double envelopeXIn) {envelopeX = envelopeXIn;}
00073 void SetEnvelopeY(G4double envelopeYIn) {envelopeY = envelopeYIn;}
00074 void SetEnvelopeXp(G4double envelopeXpIn){envelopeXp= envelopeXpIn;}
00075 void SetEnvelopeYp(G4double envelopeYpIn){envelopeYp= envelopeYpIn;}
00076 void SetWeightParameter(G4double haloPSWeightParameter) {weightParameter = haloPSWeightParameter;}
00077 void SetWeightFunction(std::string haloPSWeightFunction) {
00078 if(haloPSWeightFunction == "flat" || haloPSWeightFunction == "oneoverr" || haloPSWeightFunction == "exp") {
00079 weightFunction = haloPSWeightFunction;
00080 }
00081 else {
00082 weightFunction = "";
00083 }
00084 }
00085 };
00086
00087 #endif