Line | Branch | Exec | Source |
---|---|---|---|
1 | #include "Algorithm.h" | ||
2 | |||
3 | namespace iguana::clas12 { | ||
4 | REGISTER_IGUANA_ALGORITHM(FTEnergyCorrection); | ||
5 | |||
6 | 1 | void FTEnergyCorrection::Start(hipo::banklist& banks) { | |
7 |
2/4✓ Branch 0 (3→4) taken 1 times.
✗ Branch 1 (3→11) not taken.
✓ Branch 2 (4→5) taken 1 times.
✗ Branch 3 (4→7) not taken.
|
1 | b_ft_particle = GetBankIndex(banks, "RECFT::Particle"); |
8 | 1 | electron_mass = particle::mass.at(particle::electron); | |
9 | 1 | } | |
10 | |||
11 | 1000 | void FTEnergyCorrection::Run(hipo::banklist& banks) const { | |
12 |
1/2✓ Branch 0 (3→4) taken 1000 times.
✗ Branch 1 (3→43) not taken.
|
1000 | auto& ftParticleBank = GetBank(banks, b_ft_particle, "RECFT::Particle"); |
13 |
1/2✓ Branch 0 (12→13) taken 1000 times.
✗ Branch 1 (12→49) not taken.
|
2000 | ShowBank(ftParticleBank, Logger::Header("INPUT FT PARTICLES")); |
14 |
2/2✓ Branch 0 (32→20) taken 2580 times.
✓ Branch 1 (32→33) taken 1000 times.
|
3580 | for(auto const& row : ftParticleBank.getRowList()) { |
15 |
2/2✓ Branch 0 (21→22) taken 377 times.
✓ Branch 1 (21→31) taken 2203 times.
|
2580 | if(ftParticleBank.getInt("pid", row) == particle::PDG::electron) { |
16 | 377 | auto px = ftParticleBank.getFloat("px", row); | |
17 | 377 | auto py = ftParticleBank.getFloat("py", row); | |
18 | 377 | auto pz = ftParticleBank.getFloat("pz", row); | |
19 | 377 | auto E = std::hypot(std::hypot(px, py, pz), electron_mass); | |
20 |
1/2✓ Branch 0 (26→27) taken 377 times.
✗ Branch 1 (26→55) not taken.
|
377 | auto [px_new, py_new, pz_new, E_new] = Transform(px, py, pz, E); |
21 |
1/2✓ Branch 0 (27→28) taken 377 times.
✗ Branch 1 (27→55) not taken.
|
377 | ftParticleBank.putFloat("px", row, px_new); |
22 |
1/2✓ Branch 0 (28→29) taken 377 times.
✗ Branch 1 (28→55) not taken.
|
377 | ftParticleBank.putFloat("py", row, py_new); |
23 |
1/2✓ Branch 0 (29→30) taken 377 times.
✗ Branch 1 (29→55) not taken.
|
377 | ftParticleBank.putFloat("pz", row, pz_new); |
24 | } | ||
25 | } | ||
26 |
1/2✓ Branch 0 (36→37) taken 1000 times.
✗ Branch 1 (36→56) not taken.
|
2000 | ShowBank(ftParticleBank, Logger::Header("OUTPUT FT PARTICLES")); |
27 | 1000 | } | |
28 | |||
29 | 377 | Momentum4 FTEnergyCorrection::Transform( | |
30 | vector_element_t const px, | ||
31 | vector_element_t const py, | ||
32 | vector_element_t const pz, | ||
33 | vector_element_t const E) const | ||
34 | { | ||
35 | vector_element_t rho = std::hypot(px, py, pz); | ||
36 | 377 | vector_element_t E_new = CorrectEnergy(E); | |
37 | 377 | return { E_new*(px/rho), E_new*(py/rho), E_new*(pz/rho), E_new }; | |
38 | } | ||
39 | |||
40 | 377 | vector_element_t FTEnergyCorrection::CorrectEnergy(vector_element_t const E) const | |
41 | { | ||
42 | 377 | return E + 0.0208922 + 0.050158*E - 0.0181107*pow(E,2) + 0.00305671*pow(E,3) - 0.000178235*pow(E,4); | |
43 | } | ||
44 | |||
45 | 1 | void FTEnergyCorrection::Stop() { | |
46 | 1 | } | |
47 | |||
48 | } | ||
49 |