144 static constexpr double kKbind = 14.3256e-6;
145 static constexpr double kL1bind = 1.9210e-6;
146 static constexpr double kKalpha = 12.6000e-6;
147 static constexpr double kKfluY = 0.652;
150 double E_T1 = 32.1516e-6;
151 double ICC_T1 = 2035.0;
152 double Kfrac_T1 = 0.248;
153 double E_T2 = 9.4053e-6;
154 double ICC_T2 = 17.09;
157 const char* g4dir = std::getenv(
"G4LEVELGAMMADATA");
159 std::string
path = std::string(g4dir) +
"/z36.a83";
160 double fE1, fICC1, fKf1, fE2, fICC2;
161 if (parseG4PhotonEvap(
path.c_str(), fE1, fICC1, fKf1, fE2, fICC2)) {
167 LOG(info) <<
"[KrDecayTable] Loaded from " <<
path <<
" -- "
168 <<
"T1: E=" << fE1 <<
" keV ICC=" << ICC_T1 <<
" K_frac=" << Kfrac_T1 <<
", "
169 <<
"T2: E=" << fE2 <<
" keV ICC=" << ICC_T2;
171 LOG(warning) <<
"[KrDecayTable] Could not parse " <<
path <<
" -- using hardcoded fallback values";
174 LOG(warning) <<
"[KrDecayTable] G4LEVELGAMMADATA not set -- using hardcoded fallback values";
178 const double P_T1_g = 1.0 / (1.0 + ICC_T1);
179 const double P_T1_K_IC = Kfrac_T1 * ICC_T1 / (1.0 + ICC_T1);
180 const double P_T1_out = ICC_T1 / (1.0 + ICC_T1) - P_T1_K_IC;
181 const double P_T2_g = 1.0 / (1.0 + ICC_T2);
182 const double P_T2_IC = ICC_T2 / (1.0 + ICC_T2);
184 const double P_T1_Kf = P_T1_K_IC * kKfluY;
185 const double P_T1_Ka = P_T1_K_IC * (1.0 - kKfluY);
188 const double E_L_CE_T1 = E_T1 - kL1bind;
189 const double E_K_CE = E_T1 - kKbind;
190 const double E_KLL = kKbind - 2.0 * kL1bind;
191 const double E_res_aug = kKbind - E_KLL;
192 const double E_Laug_Kf = kKbind - kKalpha;
193 const double E_L_CE_T2 = E_T2 - kL1bind;
199 channels[
i] = {P_T1_out * P_T2_IC, 4, {{11, E_L_CE_T1}, {11, kL1bind}, {11, E_L_CE_T2}, {11, kL1bind}}};
203 channels[
i] = {P_T1_out * P_T2_g, 3, {{11, E_L_CE_T1}, {11, kL1bind}, {22, E_T2}}};
207 channels[
i] = {P_T1_Ka * P_T2_IC, 5, {{11, E_K_CE}, {11, E_KLL}, {11, E_res_aug}, {11, E_L_CE_T2}, {11, kL1bind}}};
211 channels[
i] = {P_T1_Kf * P_T2_IC, 5, {{11, E_K_CE}, {11, E_Laug_Kf}, {22, kKalpha}, {11, E_L_CE_T2}, {11, kL1bind}}};
215 channels[
i] = {P_T1_Kf * P_T2_g, 4, {{11, E_K_CE}, {11, E_Laug_Kf}, {22, kKalpha}, {22, E_T2}}};
219 channels[
i] = {P_T1_Ka * P_T2_g, 4, {{11, E_K_CE}, {11, E_KLL}, {11, E_res_aug}, {22, E_T2}}};
223 channels[
i] = {P_T1_g * P_T2_IC, 3, {{22, E_T1}, {11, E_L_CE_T2}, {11, kL1bind}}};
227 channels[
i] = {P_T1_g * P_T2_g, 2, {{22, E_T1}, {22, E_T2}}};
316 const int status = krO2EncodedStatus(1, 0);
318 for (
size_t iv = 0; iv < mVertices.size(); ++iv) {
319 double vx = mVertices[iv][0];
320 double vy = mVertices[iv][1];
321 double vz = mVertices[iv][2];
324 for (
int ip = 0; ip < ch.
nProducts; ++ip) {
331 double mass = (pdg == 11) ? 0.000511 : 0.0;
332 double E = eKin + mass;
333 double pmag = std::sqrt(std::max(0., E * E - mass * mass));
334 double cosT = gRandom->Uniform(-1., 1.);
335 double sinT = std::sqrt(1. - cosT * cosT);
336 double phi = gRandom->Uniform(0., TMath::TwoPi());
338 TParticle part(pdg, status, -1, -1, -1, -1,
339 pmag * sinT * std::cos(phi),
340 pmag * sinT * std::sin(phi),