81 if (targetMass < 500 * MeV)
83 / CLHEP::neutron_mass_c2;
90 theNeutron.
Lorentz(theNeutron, theTarget);
100 thePhotons = theMF6FinalState.
Sample(eKinetic);
103 thePhotons = theFinalStatePhotons.
GetPhotons(eKinetic);
105 if (thePhotons ==
nullptr) {
107 "Final state data for photon is not properly allocated");
117 photonEvaporation.
SetICM(
true);
120 for (
auto it = products->cbegin(); it != products->cend(); ++it) {
123 if ((*it)->GetParticleDefinition() !=
nullptr)
129 if ((*it)->GetMomentum().mag() > 10 * CLHEP::MeV)
132 if ((*it)->GetExcitationEnergy() > 1.0e-2 * eV) {
133 G4double ex = (*it)->GetExcitationEnergy();
136 aPhoton->SetMomentum((*it)->GetMomentum().vect().unit() * ex);
138 thePhotons->push_back(aPhoton);
141 theOne->SetMomentum((*it)->GetMomentum().vect()
142 * ((*it)->GetMomentum().t() - (*it)->GetExcitationEnergy())
143 / (*it)->GetMomentum().t());
144 thePhotons->push_back(theOne);
160 theOne->SetMomentum(direction);
161 thePhotons->push_back(theOne);
167 (*thePhotons)[0]->GetDefinition()->GetBaryonNumber() == 0) {
171 + CLHEP::neutron_mass_c2
173 (*thePhotons)[0]->SetMomentum(Q * direction);
178 for (i = 0; i < nPhotons; i++) {
179 (*thePhotons)[i]->Lorentz(*((*thePhotons)[i]), -1*theTarget);
184 if (nPhotons == 1 && thePhotons->operator[](0)->GetDefinition()->GetBaryonNumber() == 0) {
187 theOne->SetDefinition(aRecoil);
191 - thePhotons->operator[](0)->GetMomentum();
193 theOne->SetMomentum(aMomentum);
198 for (i = 0; i < nPhotons; ++i) {
201 theOne->
SetDefinition(thePhotons->operator[](i)->GetDefinition());
202 theOne->SetMomentum(thePhotons->operator[](i)->GetMomentum());
204 delete thePhotons->operator[](i);
211 for (std::size_t j = 0; j !=
theResult.
Get()->GetNumberOfSecondaries(); j++) {
219 for (std::size_t j = 0; j !=
theResult.
Get()->GetNumberOfSecondaries(); ++j) {
230 if (nPhotons - nNonZero > 0) {
233 std::vector<G4double> vRand;
234 vRand.push_back(0.0);
235 for (
G4int j = 0; j != nPhotons - nNonZero - 1; j++) {
238 vRand.push_back(1.0);
239 std::sort(vRand.begin(), vRand.end());
241 std::vector<G4double> vEPhoton;
242 for (
G4int j = 0; j < (
G4int)vRand.size() - 1; j++) {
243 vEPhoton.push_back(deltaE * (vRand[j + 1] - vRand[j]));
245 std::sort(vEPhoton.begin(), vEPhoton.end());
247 for (
G4int j = 0; j < nPhotons - nNonZero - 1; j++) {
255 theOne->SetMomentum(tempVector);
265 theOne->SetMomentum(lastPhoton);
273 theOne->SetDefinition(aRecoil);
274 theOne->SetMomentum(aMomentum);
void SetDefinition(const G4ParticleDefinition *aParticleDefinition)
G4ParticleDefinition * GetDefinition() const
G4LorentzVector Get4Momentum() const
G4double GetPDGMass() const
void Init(std::istream &aDataFile)
void SetProjectileRP(G4ReactionProduct &aIncidentPart)
void SetTarget(G4ReactionProduct &aTarget)
G4ReactionProductVector * Sample(G4double anEnergy)
G4ParticleHPManager * fManager
G4Cache< G4HadFinalState * > theResult
void SetAZMs(G4ParticleHPDataUsed used)
G4bool GetUseOnlyPhotoEvaporation() const
void GetDataStream(const G4String &, std::istringstream &iss)
static G4ParticleHPManager * GetInstance()
G4bool GetDoNotAdjustFinalState() const
G4ParticleHPDataUsed GetName(G4int A, G4int Z, const G4String &base, const G4String &rest, G4bool &active)
void InitEnergies(std::istream &aDataFile)
G4ReactionProductVector * GetPhotons(G4double anEnergy)
void InitAngular(std::istream &aDataFile)
G4bool InitMean(std::istream &aDataFile)