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

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

Generated on 28 Jun 2015 for BDSIM by  doxygen 1.4.7