include/BDSBunch.hh

00001 // Provide interface to generating
00002 // the primary particles
00003 
00004 
00005 #ifndef BDSBunch_h
00006 #define BDSBunch_h 
00007 
00008 // GEANT4 types
00009 #include "globals.hh"
00010 
00011 // CLHEP
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 // C++ 
00021 #include <fstream>
00022 #include <list>
00023 
00024 class BDSBunch {
00025 
00026 public: 
00027   BDSBunch(); // default constructor
00028   ~BDSBunch();
00029 
00030 public:
00031 
00032   void SetOptions(struct Options&);
00033 
00034   G4double GetSigmaT();  // get initial bunch distribution parameters in Gaussian case 
00035   G4double GetSigmaX(); 
00036   G4double GetSigmaY(); 
00037   G4double GetSigmaXp();
00038   G4double GetSigmaYp();
00039 
00040   // get next coordinate 
00041   G4double GetNextX(); 
00042   G4double GetNextY(); 
00043   G4double GetNextZ(); 
00044   G4double GetNextXp();
00045   G4double GetNextYp();
00046   G4double GetNextT(); 
00047 
00048   // the same in a bulk
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   // set initial bunch distribution parameters in Gaussian case 
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   // options
00088   G4bool verbose;
00089   G4bool verboseStep;
00090   G4bool verboseEvent;
00091   G4bool verboseEventNumber;
00092   G4int  nptwiss;
00093 
00094   // distribution type
00095   int distribType;
00096 
00097   // distribution centre
00098   G4double X0; // (m)
00099   G4double Y0; // (m)
00100   G4double Z0; // (m)
00101   G4double T0;
00102 
00103   G4double Xp0; // (rad)
00104   G4double Yp0; // (rad)
00105   G4double Zp0; // (rad)
00106 
00107   // parameters for Gaussian distribution
00108   G4double sigmaX; // sigmas for Gaussian bunches (m)
00109   G4double sigmaY;
00110   G4double sigmaT;
00111   G4double sigmaXp; // (rad)
00112   G4double sigmaYp; // (rad)
00113   
00114   // parameters for ring distribution
00115   G4double rMin;
00116   G4double rMax;
00117 
00118   // parameters for the elliptic shell distribution
00119   G4double shellx, shelly, shellxp, shellyp;
00120   
00121   // twiss parameters
00122   G4double betaX;
00123   G4double betaY;
00124   G4double alphaX;
00125   G4double alphaY;
00126   G4double emitX;
00127   G4double emitY;
00128 
00129   // sigma matrix parameters 
00130   CLHEP::HepVector    meansGM;
00131   CLHEP::HepSymMatrix sigmaGM;
00132 
00133   // energy spread
00134   G4double energySpread;
00135 
00136   struct Doublet {
00137     G4String name;
00138     G4double unit; // relative to SI units, i.e. mm=0.001 etc.
00139   };
00140 
00141   std::list<struct Doublet> fields;
00142 
00143   // input filename
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  // Gaussian Random number generator:
00153   CLHEP::RandGauss*      GaussGen;
00154   CLHEP::RandFlat*       FlatGen;
00155   CLHEP::RandMultiGauss* GaussMultiGen;
00156 
00157 
00158   // event number for phase for ellipse for SR rescaling
00159   G4int partId;
00160 };
00161 
00162 #endif

Generated on 27 Aug 2013 for BDSIM by  doxygen 1.4.7