291 G4int nSecondaries = 0;
300 if(nDiscrete==1&¤t<1.0001)
312 for(i=0;i<nSecondaries;i++)
316 thePhotons->push_back(theOne);
374 std::vector< G4double > photons_e_best(
actualMult.
Get()->at(0) , 0.0 );
377 for (
G4int j = 0 ; j < maxTry ; j++ )
379 std::vector< G4double > photons_e(
actualMult.
Get()->at(0) , 0.0 );
380 for ( std::vector< G4double >::iterator
381 it = photons_e.begin() ; it < photons_e.end() ; it++ )
385 if ( std::accumulate( photons_e.begin() , photons_e.end() , 0.0 ) > maximumE )
387 if ( std::accumulate( photons_e.begin() , photons_e.end() , 0.0 ) < best )
388 photons_e_best = photons_e;
393 for ( std::vector< G4double >::iterator
394 it = photons_e.begin() ; it < photons_e.end() ; it++ )
396 thePhotons->operator[](count)->SetKineticEnergy( *it );
404 G4cout <<
"NeutronHPPhotonDist could not find fitted energy set for multiplicity of " <<
actualMult.
Get()->at(0) <<
"." <<
G4endl;
405 G4cout <<
"NeutronHPPhotonDist will use the best set." <<
G4endl;
406 for ( std::vector< G4double >::iterator
407 it = photons_e_best.begin() ; it < photons_e_best.end() ; it++ )
409 thePhotons->operator[](count)->SetKineticEnergy( *it );
420 thePhotons->operator[](count)->SetKineticEnergy(
energy[i]);
423 if(count > nSecondaries)
throw G4HadronicException(__FILE__, __LINE__,
"G4ParticleHPPhotonDist::GetPhotons inconsistancy");
443 if(random<run/sum)
break;
445 if(theP==nPartials) theP=nPartials-1;
450 thePhotons->operator[](count)->SetKineticEnergy(eGamm);
455 thePhotons->operator[](count)->SetKineticEnergy(
energy[i]);
458 if(count > nSecondaries)
throw G4HadronicException(__FILE__, __LINE__,
"G4ParticleHPPhotonDist::GetPhotons inconsistancy");
465 for (i=0; i< nSecondaries; i++)
468 G4double theta = std::acos(costheta);
471 G4double en = thePhotons->operator[](i)->GetTotalEnergy();
472 G4ThreeVector temp(en*sinth*std::cos(phi), en*sinth*std::sin(phi), en*std::cos(theta) );
473 thePhotons->operator[](i)->SetMomentum( temp ) ;
479 for(i=0; i<nSecondaries; i++)
481 G4double currentEnergy = thePhotons->operator[](i)->GetTotalEnergy();
484 if (std::abs(currentEnergy-
theGammas[ii])<0.1*
keV)
break;
486 if(ii==nDiscrete2) ii--;
494 G4double theta = std::acos(costheta);
497 G4double en = thePhotons->operator[](i)->GetTotalEnergy();
498 G4ThreeVector tempVector(en*sinth*std::cos(phi), en*sinth*std::sin(phi), en*std::cos(theta) );
499 thePhotons->operator[](i)->SetMomentum( tempVector ) ;
505 for (iii=0; iii<
nNeu[ii-
nIso]; iii++)
523 G4double cosTh = aStore.SampleMax(anEnergy);
527 G4double en = thePhotons->operator[](i)->GetTotalEnergy();
528 G4ThreeVector tempVector(en*sinth*std::cos(phi), en*sinth*std::sin(phi), en*std::cos(theta) );
529 thePhotons->operator[](i)->SetMomentum( tempVector ) ;
535 for (iii=0; iii<nNeu[ii-
nIso]; iii++)
545 G4double en = thePhotons->operator[](i)->GetTotalEnergy();
546 G4ThreeVector tmpVector(en*sinth*std::cos(phi), en*sinth*std::sin(phi), en*costh );
547 thePhotons->operator[](i)->SetMomentum( tmpVector ) ;
566 if(random < running[i]/running[nGammaEnergies-1])
break;
584 G4double theta = std::acos(costheta);
591 G4ThreeVector temp(en*sinth*std::cos(phi), en*sinth*std::sin(phi), en*std::cos(theta) );
599 if (std::abs(currentEnergy-
theGammas[ii])<0.1*
keV)
break;
601 if(ii==nDiscrete2) ii--;
615 G4ThreeVector tempVector(en*sinth*std::cos(phi), en*sinth*std::sin(phi), en*std::cos(theta) );
622 for (iii=0; iii<nNeu[ii-
nIso]; iii++)
640 G4double cosTh = aStore.SampleMax(anEnergy);
648 G4ThreeVector tempVector(en*sinth*std::cos(phi), en*sinth*std::sin(phi), en*std::cos(theta) );
655 for (iii=0; iii<nNeu[ii-
nIso]; iii++)
669 G4ThreeVector tmpVector(en*sinth*std::cos(phi), en*sinth*std::sin(phi), en*costh );
673 thePhotons->push_back(theOne);
690 thePhotons->push_back( theOne );
696 std::vector < G4double > dif( nDiscrete , 0.0 );
737 if ( iphoton <
nIso )
760 for (
G4int j = 0 ; j < nNeu [ iphoton -
nIso ] ; j++ )
763 if (
theLegendre[ iphoton -
nIso ][ j ].GetEnergy() > anEnergy )
break;
768 aStore.SetCoeff( 0 , &(
theLegendre[ iphoton -
nIso ][ iangle - 1 ] ) );
770 cosTheta = aStore.SampleMax( anEnergy );
779 for (
G4int j = 0 ; j < nNeu [ iphoton -
nIso ] ; j++ )
782 if (
theAngular[ iphoton -
nIso ][ j ].GetEnergy() > anEnergy )
break;
793 G4double theta = std::acos( cosTheta );
794 G4double sinTheta = std::sin( theta );
797 G4ThreeVector direction ( sinTheta*std::cos( phi ) , sinTheta * std::sin( phi ) , cosTheta );
799 thePhotons->operator[]( 0 )->SetMomentum( photonP ) ;
G4int theInternalConversionFlag
G4long G4Poisson(G4double mean)
G4ParticleHPLegendreTable ** theLegendre
G4ParticleHPPartial ** partials
void SetMomentum(const G4double x, const G4double y, const G4double z)
G4ParticleHPAngularP ** theAngular
G4ParticleHPVector * thePartialXsec
G4double GetCosTh(G4int l)
G4double * theTransitionProbabilities
G4Cache< std::vector< G4int > *> actualMult
G4double GetXsec(G4int i)
void SetDefinition(const G4ParticleDefinition *aParticleDefinition)
std::vector< G4ReactionProduct * > G4ReactionProductVector
G4ParticleHPVector * theYield
G4GLOB_DLL std::ostream G4cout
G4double * theLevelEnergies
void SetTotalEnergy(const G4double en)
static const double twopi
G4double GetY(G4double x)
G4int GetVectorLength() const
G4double GetTotalMomentum() const
G4double GetX(G4int i) const
G4double GetPDGMass() const
G4double GetTotalEnergy() const
G4ParticleHPVector * probs
static G4Electron * Electron()
G4double GetY(G4int i, G4int j)
G4double * thePhotonTransitionFraction