00001
00002
00003
00004
00005 #ifndef BDSBunch_h
00006 #define BDSBunch_h
00007
00008
00009 #include "globals.hh"
00010
00011
00012 #include "CLHEP/Matrix/Vector.h"
00013 #include "CLHEP/Matrix/SymMatrix.h"
00014 namespace CLHEP {
00015 class RandGauss;
00016 class RandFlat;
00017 class RandMultiGauss;
00018 }
00019
00020
00021 #include <fstream>
00022 #include <list>
00023
00024 class BDSBunch {
00025
00026 public:
00027 BDSBunch();
00028 ~BDSBunch();
00029
00030 public:
00031
00032 void SetOptions(struct Options&);
00033
00034 G4double GetSigmaT();
00035 G4double GetSigmaX();
00036 G4double GetSigmaY();
00037 G4double GetSigmaXp();
00038 G4double GetSigmaYp();
00039
00040
00041 G4double GetNextX();
00042 G4double GetNextY();
00043 G4double GetNextZ();
00044 G4double GetNextXp();
00045 G4double GetNextYp();
00046 G4double GetNextT();
00047
00048
00049 void GetNextParticle(G4double& x0,G4double& y0,G4double& z0,
00050 G4double& xp,G4double& yp,G4double& zp,
00051 G4double& t, G4double& E, G4double &weight);
00052
00053
00054 G4double GetEmitX();
00055 G4double GetEmitY();
00056
00057 G4double GetAlphaX();
00058 G4double GetAlphaY();
00059
00060 G4double GetBetaX();
00061 G4double GetBetaY();
00062
00063
00064 void SetSigmaT(double);
00065 void SetSigmaX(double);
00066 void SetSigmaY(double);
00067 void SetSigmaXp(double);
00068 void SetSigmaYp(double);
00069
00070 void SetX0(double);
00071 void SetY0(double);
00072 void SetXp0(double);
00073 void SetYp0(double);
00074
00075 void SetEmitX(double);
00076 void SetEmitY(double);
00077
00078 void SetAlphaX(double);
00079 void SetAlphaY(double);
00080
00081 void SetBetaX(double);
00082 void SetBetaY(double);
00083
00084 void SetEnergySpread(double);
00085
00086 private:
00087
00088 G4bool verbose;
00089 G4bool verboseStep;
00090 G4bool verboseEvent;
00091 G4bool verboseEventNumber;
00092 G4int nptwiss;
00093
00094
00095 int distribType;
00096
00097
00098 G4double X0;
00099 G4double Y0;
00100 G4double Z0;
00101 G4double T0;
00102
00103 G4double Xp0;
00104 G4double Yp0;
00105 G4double Zp0;
00106
00107
00108 G4double sigmaX;
00109 G4double sigmaY;
00110 G4double sigmaT;
00111 G4double sigmaXp;
00112 G4double sigmaYp;
00113
00114
00115 G4double rMin;
00116 G4double rMax;
00117
00118
00119 G4double shellx, shelly, shellxp, shellyp;
00120
00121
00122 G4double betaX;
00123 G4double betaY;
00124 G4double alphaX;
00125 G4double alphaY;
00126 G4double emitX;
00127 G4double emitY;
00128
00129
00130 CLHEP::HepVector meansGM;
00131 CLHEP::HepSymMatrix sigmaGM;
00132
00133
00134 G4double energySpread;
00135
00136 struct Doublet {
00137 G4String name;
00138 G4double unit;
00139 };
00140
00141 std::list<struct Doublet> fields;
00142
00143
00144 G4String inputfile;
00145 G4int nlinesIgnore;
00146 void skip(G4int nvalues);
00147 std::ifstream InputBunchFile;
00148 template <typename Type> G4bool ReadValue(Type &value);
00149 void OpenBunchFile();
00150 void CloseBunchFile();
00151
00152
00153 CLHEP::RandGauss* GaussGen;
00154 CLHEP::RandFlat* FlatGen;
00155 CLHEP::RandMultiGauss* GaussMultiGen;
00156
00157
00158
00159 G4int partId;
00160 };
00161
00162 #endif