93 if(atype !=
"iso" && atype !=
"cos" && atype !=
"user" && atype !=
"planar"
94 && atype !=
"beam1d" && atype !=
"beam2d" && atype !=
"focused")
95 G4cout <<
"Error, distribution must be iso, cos, planar, beam1d, beam2d, focused or user" <<
G4endl;
110 if(refname ==
"angref1")
112 else if(refname ==
"angref2")
267 theta = std::sqrt (px*px + py*py);
269 phi = std::acos(px/theta);
270 if ( py < 0.) phi = -phi;
275 px = -std::sin(theta) * std::cos(phi);
276 py = -std::sin(theta) * std::sin(phi);
277 pz = -std::cos(theta);
279 finx = px, finy =py, finz =pz;
286 G4double ResMag = std::sqrt((finx*finx) + (finy*finy) + (finz*finz));
306 G4cout <<
"Generating focused vector: " << mom <<
G4endl;
317 G4double sintheta, sinphi,costheta,cosphi;
320 sintheta = std::sqrt(1. - costheta*costheta);
324 sinphi = std::sin(
Phi);
325 cosphi = std::cos(
Phi);
327 px = -sintheta * cosphi;
328 py = -sintheta * sinphi;
360 G4double ResMag = std::sqrt((finx*finx) + (finy*finy) + (finz*finz));
371 G4cout <<
"Generating isotropic vector: " << mom <<
G4endl;
380 G4double sintheta, sinphi,costheta,cosphi;
384 costheta = std::sqrt(1. -sintheta*sintheta);
388 sinphi = std::sin(
Phi);
389 cosphi = std::cos(
Phi);
391 px = -sintheta * cosphi;
392 py = -sintheta * sinphi;
422 G4double ResMag = std::sqrt((finx*finx) + (finy*finy) + (finz*finz));
434 G4cout <<
"Resultant cosine-law unit momentum vector " << mom <<
G4endl;
445 G4cout <<
"Resultant Planar wave momentum vector " << mom <<
G4endl;
470 Theta = std::acos(1. - (2. * rndm));
485 px = -std::sin(
Theta) * std::cos(
Phi);
486 py = -std::sin(
Theta) * std::sin(
Phi);
487 pz = -std::cos(
Theta);
489 pmag = std::sqrt((px*px) + (py*py) + (pz*pz));
504 G4double ResMag = std::sqrt((finx*finx) + (finy*finy) + (finz*finz));
519 G4cout <<
"Raw Unit vector "<<pxh<<
","<<pyh<<
","<<pzh<<
G4endl;
530 G4double ResMag = std::sqrt((resultx*resultx) + (resulty*resulty) + (resultz*resultz));
531 resultx = resultx/ResMag;
532 resulty = resulty/ResMag;
533 resultz = resultz/ResMag;
566 G4double bins[1024],vals[1024], sum;
572 for(ii=1;ii<maxbin;ii++)
575 vals[ii] =
UDefThetaH(
size_t(ii)) + vals[ii-1];
578 for(ii=0;ii<maxbin;ii++)
580 vals[ii] = vals[ii]/sum;
613 G4double bins[1024],vals[1024], sum;
619 for(ii=1;ii<maxbin;ii++)
622 vals[ii] =
UDefPhiH(
size_t(ii)) + vals[ii-1];
625 for(ii=0;ii<maxbin;ii++)
627 vals[ii] = vals[ii]/sum;
643 if (atype ==
"theta") {
646 else if (atype ==
"phi"){
673 G4cout <<
"Error: AngDistType has unusual value" <<
G4endl;
ThreeVector shoot(const G4int Ap, const G4int Af)
G4ThreeVector GetSideRefVec2() const
void GenerateBeamFlux(G4ParticleMomentum &outputMom)
G4double GenerateUserDefTheta()
CLHEP::Hep3Vector G4ThreeVector
G4PhysicsOrderedFreeVector UDefPhiH
void GenerateCosineLawFlux(G4ParticleMomentum &outputMom)
void SetBeamSigmaInAngR(G4double)
G4PhysicsOrderedFreeVector IPDFPhiH
const Hep3Vector HepYHat(0.0, 1.0, 0.0)
#define G4MUTEXINIT(mutex)
G4PhysicsOrderedFreeVector IPDFThetaH
void SetBeamSigmaInAngY(G4double)
void InsertValues(G4double energy, G4double value)
void SetMinTheta(G4double)
void SetUseUserAngAxis(G4bool)
G4SPSPosDistribution * posDist
size_t GetVectorLength() const
G4double GetLowEdgeEnergy(size_t binNumber) const
G4SPSRandomGenerator * angRndm
const Hep3Vector HepXHat(1.0, 0.0, 0.0)
G4String GetSourcePosType()
void UserDefAngPhi(G4ThreeVector)
void UserDefAngTheta(G4ThreeVector)
G4GLOB_DLL std::ostream G4cout
G4PhysicsOrderedFreeVector UDefThetaH
G4ParticleMomentum particle_momentum_direction
G4ParticleMomentum GenerateOne()
void SetBiasRndm(G4SPSRandomGenerator *a)
G4PhysicsOrderedFreeVector ZeroPhysVector
void DefineAngRefAxes(G4String, G4ThreeVector)
G4double GetEnergy(G4double aValue)
G4ThreeVector GetSideRefVec3() const
void GenerateFocusedFlux(G4ParticleMomentum &outputMom)
void SetAngDistType(G4String)
void SetPosDistribution(G4SPSPosDistribution *a)
void SetFocusPoint(G4ThreeVector)
void SetParticleMomentumDirection(G4ParticleMomentum aMomentumDirection)
const Hep3Vector HepZHat(0.0, 0.0, 1.0)
G4ThreeVector GetSideRefVec1() const
void GenerateUserDefFlux(G4ParticleMomentum &outputMom)
G4ThreeVector GetParticlePos() const
void SetUserWRTSurface(G4bool)
void GenerateIsotropicFlux(G4ParticleMomentum &outputMom)
void SetVerbosity(G4int a)
void SetMaxTheta(G4double)
G4ThreeVector G4ParticleMomentum
#define G4MUTEXDESTROY(mutex)
G4double GenerateUserDefPhi()
void GeneratePlanarFlux(G4ParticleMomentum &outputMom)
void SetBeamSigmaInAngX(G4double)