/scratch0/jsnuveri/BDSIM/BDSIMgit/bdsim/src/BDSBunchSquare.cc

00001 #include "BDSBunchSquare.hh"
00002 #include "BDSDebug.hh"
00003 
00004 BDSBunchSquare::BDSBunchSquare() :
00005   BDSBunchInterface(), envelopeX(0.0), envelopeY(0.0), 
00006   envelopeXp(0.0), envelopeYp(0.0), envelopeT(0.0), envelopeE(0.0)
00007 {
00008 #ifdef BDSDEBUG 
00009   G4cout << __METHOD_NAME__ << G4endl;
00010 #endif
00011 
00012   FlatGen  = new CLHEP::RandFlat(*CLHEP::HepRandom::getTheEngine());
00013 }
00014 
00015 BDSBunchSquare::BDSBunchSquare(G4double envelopeXIn,  G4double envelopeYIn,
00016                                G4double envelopeXpIn, G4double envelopeYpIn,
00017                                G4double envelopeTIn,  G4double envelopeEIn,
00018                                G4double X0In,         G4double Y0In,         G4double Z0In,   G4double T0In, 
00019                                G4double Xp0In,        G4double Yp0In,        G4double Zp0In) :  
00020   BDSBunchInterface(X0In,Y0In,Z0In,T0In,Xp0In,Yp0In,Zp0In,0.0,0.0), 
00021   envelopeX(envelopeXIn), envelopeY(envelopeYIn), 
00022   envelopeXp(envelopeXpIn), envelopeYp(envelopeYpIn), 
00023   envelopeT(envelopeTIn), envelopeE(envelopeEIn)
00024 {
00025 #ifdef BDSDEBUG 
00026   G4cout << __METHOD_NAME__ << G4endl;
00027 #endif
00028 
00029   FlatGen  = new CLHEP::RandFlat(*CLHEP::HepRandom::getTheEngine());
00030 }
00031 
00032 BDSBunchSquare::~BDSBunchSquare() 
00033 {
00034 #ifdef BDSDEBUG 
00035   G4cout << __METHOD_NAME__ << G4endl;
00036 #endif
00037 
00038   delete FlatGen;
00039 }
00040 
00041 void BDSBunchSquare::SetOptions(struct Options &opt) {
00042 #ifdef BDSDEBUG 
00043   G4cout << __METHOD_NAME__ << G4endl;
00044 #endif
00045 
00046   BDSBunchInterface::SetOptions(opt);
00047   SetEnvelopeX(opt.envelopeX); 
00048   SetEnvelopeY(opt.envelopeY);
00049   SetEnvelopeXp(opt.envelopeXp);
00050   SetEnvelopeYp(opt.envelopeYp);
00051   SetEnvelopeT(opt.envelopeT);
00052   SetEnvelopeE(opt.envelopeE);
00053   return; 
00054 }
00055 
00056 void BDSBunchSquare::GetNextParticle(G4double& x0, G4double& y0, G4double& z0, 
00057                      G4double& xp, G4double& yp, G4double& zp,
00058                      G4double& t , G4double&  E, G4double& weight) {
00059 #ifdef BDSDEBUG 
00060   G4cout << __METHOD_NAME__ << G4endl;
00061 #endif
00062 
00063   x0 = X0  * CLHEP::m;
00064   y0 = Y0  * CLHEP::m;
00065   z0 = Z0  * CLHEP::m;
00066   xp = Xp0 * CLHEP::rad;
00067   yp = Yp0 * CLHEP::rad;
00068   z0 = Z0  * CLHEP::m + (T0 - envelopeT * (1.-2.*FlatGen->shoot())) * CLHEP::c_light * CLHEP::s;
00069   
00070   if(envelopeX !=0) x0  += envelopeX  * (1-2*FlatGen->shoot()) * CLHEP::m;
00071   if(envelopeY !=0) y0  += envelopeY  * (1-2*FlatGen->shoot()) * CLHEP::m;
00072   if(envelopeXp !=0) xp += envelopeXp * (1-2*FlatGen->shoot()) * CLHEP::rad;
00073   if(envelopeYp !=0) yp += envelopeYp * (1-2*FlatGen->shoot()) * CLHEP::rad;
00074   
00075   zp = CalculateZp(xp,yp,Zp0);
00076   t = 0 * CLHEP::s;
00077   E = BDSGlobalConstants::Instance()->GetParticleKineticEnergy() * (1 + envelopeE * (1-2*FlatGen->shoot()));
00078 
00079   weight = 1.0;
00080   return; 
00081 }

Generated on 28 Jun 2015 for BDSIM by  doxygen 1.4.7