87 if(atype !=
"iso" && atype !=
"cos" && atype !=
"user" && atype !=
"planar"
88 && atype !=
"beam1d" && atype !=
"beam2d" && atype !=
"focused")
89 G4cout <<
"Error, distribution must be iso, cos, planar, beam1d, beam2d, focused or user" <<
G4endl;
103 if(refname ==
"angref1")
105 else if(refname ==
"angref2")
216 theta = std::sqrt (px*px + py*py);
218 phi = std::acos(px/theta);
219 if ( py < 0.) phi = -phi;
226 px = -std::sin(theta) * std::cos(phi);
227 py = -std::sin(theta) * std::sin(phi);
228 pz = -std::cos(theta);
230 finx = px, finy =py, finz =pz;
237 G4double ResMag = std::sqrt((finx*finx) + (finy*finy) + (finz*finz));
268 G4double sintheta, sinphi,costheta,cosphi;
271 sintheta = std::sqrt(1. - costheta*costheta);
275 sinphi = std::sin(
Phi);
276 cosphi = std::cos(
Phi);
278 px = -sintheta * cosphi;
279 py = -sintheta * sinphi;
311 G4double ResMag = std::sqrt((finx*finx) + (finy*finy) + (finz*finz));
331 G4double sintheta, sinphi,costheta,cosphi;
335 costheta = std::sqrt(1. -sintheta*sintheta);
339 sinphi = std::sin(
Phi);
340 cosphi = std::cos(
Phi);
342 px = -sintheta * cosphi;
343 py = -sintheta * sinphi;
373 G4double ResMag = std::sqrt((finx*finx) + (finy*finy) + (finz*finz));
421 Theta = std::acos(1. - (2. * rndm));
436 px = -std::sin(
Theta) * std::cos(
Phi);
437 py = -std::sin(
Theta) * std::sin(
Phi);
438 pz = -std::cos(
Theta);
440 pmag = std::sqrt((px*px) + (py*py) + (pz*pz));
455 G4double ResMag = std::sqrt((finx*finx) + (finy*finy) + (finz*finz));
470 G4cout <<
"Raw Unit vector "<<pxh<<
","<<pyh<<
","<<pzh<<
G4endl;
481 G4double ResMag = std::sqrt((resultx*resultx) + (resulty*resulty) + (resultz*resultz));
482 resultx = resultx/ResMag;
483 resulty = resulty/ResMag;
484 resultz = resultz/ResMag;
516 G4double bins[1024],vals[1024], sum;
522 for(ii=1;ii<maxbin;ii++)
525 vals[ii] =
UDefThetaH(
size_t(ii)) + vals[ii-1];
528 for(ii=0;ii<maxbin;ii++)
530 vals[ii] = vals[ii]/sum;
561 G4double bins[1024],vals[1024], sum;
567 for(ii=1;ii<maxbin;ii++)
570 vals[ii] =
UDefPhiH(
size_t(ii)) + vals[ii-1];
574 for(ii=0;ii<maxbin;ii++)
576 vals[ii] = vals[ii]/sum;
590 if (atype ==
"theta") {
593 else if (atype ==
"phi"){
618 G4cout <<
"Error: AngDistType has unusual value" <<
G4endl;
ThreeVector shoot(const G4int Ap, const G4int Af)
G4ThreeVector SideRefVec3
G4double GenerateUserDefTheta()
G4ThreeVector SideRefVec2
CLHEP::Hep3Vector G4ThreeVector
G4PhysicsOrderedFreeVector UDefPhiH
void SetBeamSigmaInAngR(G4double)
G4PhysicsOrderedFreeVector IPDFPhiH
const Hep3Vector HepYHat(0.0, 1.0, 0.0)
void GeneratePlanarFlux()
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
void GenerateIsotropicFlux()
G4SPSRandomGenerator * angRndm
const Hep3Vector HepXHat(1.0, 0.0, 0.0)
void GenerateUserDefFlux()
void UserDefAngPhi(G4ThreeVector)
G4ThreeVector particle_position
void UserDefAngTheta(G4ThreeVector)
G4GLOB_DLL std::ostream G4cout
G4PhysicsOrderedFreeVector UDefThetaH
G4ParticleMomentum particle_momentum_direction
G4ParticleMomentum GenerateOne()
G4PhysicsOrderedFreeVector ZeroPhysVector
void DefineAngRefAxes(G4String, G4ThreeVector)
G4double GetEnergy(G4double aValue)
void SetAngDistType(G4String)
void SetFocusPoint(G4ThreeVector)
const Hep3Vector HepZHat(0.0, 0.0, 1.0)
void SetUserWRTSurface(G4bool)
G4ThreeVector SideRefVec1
void SetMaxTheta(G4double)
G4ThreeVector G4ParticleMomentum
G4double GenerateUserDefPhi()
void GenerateCosineLawFlux()
void GenerateFocusedFlux()
void SetBeamSigmaInAngX(G4double)