39 auto it = FissionProductYieldData.begin();
40 while (it != FissionProductYieldData.end()) {
41 std::map<G4double, std::map<G4int, G4double>*>* firstLevel = it->second;
42 if (firstLevel !=
nullptr) {
43 auto it2 = firstLevel->begin();
44 while (it2 != firstLevel->end()) {
47 firstLevel->erase(it2);
48 it2 = firstLevel->begin();
53 FissionProductYieldData.erase(it);
54 it = FissionProductYieldData.begin();
57 auto ii = mMTInterpolation.begin();
58 while (ii != mMTInterpolation.end()) {
60 mMTInterpolation.erase(ii);
61 ii = mMTInterpolation.begin();
80 if (!dbool || (Z < 2.5 && (std::abs(
theBaseZ - Z) > 0.0001 || std::abs(
theBaseA -
A) > 0.0001))) {
87 std::istringstream theData(std::ios::in);
101 while (theData.good())
107 theData >> iMT >> iMF >> dummy;
112 auto mEnergyFSPData =
new std::map<G4double, std::map<G4int, G4double>*>;
114 auto mInterporation =
new std::map<G4double, G4int>;
115 for (
G4int i = 0; i <= imax; i++) {
126 mInterporation->insert(std::pair<G4double, G4int>(Ei * eV, ip));
128 auto mFSPYieldData =
new std::map<G4int, G4double>;
129 for (
G4int j = 0; j < jmax; j++) {
133 theData >> FSP >> mFSP >>
Y;
134 G4int k = FSP * 100 + mFSP;
138 mFSPYieldData->insert(std::pair<G4int, G4double>(k, YY));
140 mEnergyFSPData->insert(
141 std::pair<
G4double, std::map<G4int, G4double>*>(Ei * eV, mFSPYieldData));
144 FissionProductYieldData.insert(
145 std::pair<
G4int, std::map<
G4double, std::map<G4int, G4double>*>*>(iMT, mEnergyFSPData));
146 mMTInterpolation.insert(std::pair<
G4int, std::map<G4double, G4int>*>(iMT, mInterporation));
167 auto ptr = FissionProductYieldData.find(454);
168 if (ptr == FissionProductYieldData.end())
171 auto mEnergyFSPData = ptr->second;
177 if (mEnergyFSPData->size() == 1) {
178 key_energy = mEnergyFSPData->cbegin()->first;
183 for (
auto it = mEnergyFSPData->cbegin(); it != mEnergyFSPData->cend(); ++it) {
193 std::map<G4int, G4double>* mFSPYieldData = (*mEnergyFSPData)[key_energy];
197 mFSPYieldData->rbegin()->second;
198 for (
auto it = mFSPYieldData->cbegin(); it != mFSPYieldData->cend(); ++it) {
201 if (rand <= it->second / ceilling) {
208 fragZ = ifrag / 100000;
209 fragA = (ifrag % 100000) / 100;
210 fragM = (ifrag % 100);
std::vector< G4DynamicParticle * > G4DynamicParticleVector
~G4ParticleHPFFFissionFS() override
G4DynamicParticleVector * ApplyYourself(G4int nNeutrons)
void GetAFissionFragment(G4double, G4int &, G4int &, G4int &)
void Init(G4double A, G4double Z, G4int M, G4String &dirName, G4String &aFSType, G4ParticleDefinition *) override
G4ParticleHPNames theNames
G4DynamicParticleVector * ApplyYourself(G4int Prompt)
void GetDataStream(const G4String &, std::istringstream &iss)
static G4ParticleHPManager * GetInstance()
G4ParticleHPDataUsed GetName(G4int A, G4int Z, const G4String &base, const G4String &rest, G4bool &active)