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 }