OPALX (Object Oriented Parallel Accelerator Library for Exascal) master (dc2a29eed580)
OPALX
Loading...
Searching...
No Matches
TestLinearBreitWheelerSpectrum.cpp
Go to the documentation of this file.
1
18#include "Utilities/Options.h"
19#include "gtest/gtest.h"
20
21#include <filesystem>
22
23namespace {
24 std::filesystem::path referenceElectronEnergyPath() {
25 return std::filesystem::path(OPALX_TEST_SOURCE_DIR) / "data"
26 / "cain_linear_breit_wheeler_head_on_electron_energy.csv";
27 }
28
29 std::filesystem::path referencePositronEnergyPath() {
30 return std::filesystem::path(OPALX_TEST_SOURCE_DIR) / "data"
31 / "cain_linear_breit_wheeler_head_on_positron_energy.csv";
32 }
33
34 std::filesystem::path referenceElectronThetaPath() {
35 return std::filesystem::path(OPALX_TEST_SOURCE_DIR) / "data"
36 / "cain_linear_breit_wheeler_head_on_electron_theta.csv";
37 }
38
39 std::filesystem::path referencePositronThetaPath() {
40 return std::filesystem::path(OPALX_TEST_SOURCE_DIR) / "data"
41 / "cain_linear_breit_wheeler_head_on_positron_theta.csv";
42 }
43
44 std::filesystem::path referenceElectronJointPath() {
45 return std::filesystem::path(OPALX_TEST_SOURCE_DIR) / "data"
46 / "cain_linear_breit_wheeler_head_on_electron_joint.csv";
47 }
48
49 std::filesystem::path referencePositronJointPath() {
50 return std::filesystem::path(OPALX_TEST_SOURCE_DIR) / "data"
51 / "cain_linear_breit_wheeler_head_on_positron_joint.csv";
52 }
53
54 std::filesystem::path referenceFinitePhotonBeamElectronEnergyPath() {
55 return std::filesystem::path(OPALX_TEST_SOURCE_DIR) / "data"
56 / "cain_linear_breit_wheeler_finite_photon_beam_electron_energy.csv";
57 }
58
59 std::filesystem::path referenceFinitePhotonBeamPositronEnergyPath() {
60 return std::filesystem::path(OPALX_TEST_SOURCE_DIR) / "data"
61 / "cain_linear_breit_wheeler_finite_photon_beam_positron_energy.csv";
62 }
63
64 std::filesystem::path referenceFinitePhotonBeamElectronThetaPath() {
65 return std::filesystem::path(OPALX_TEST_SOURCE_DIR) / "data"
66 / "cain_linear_breit_wheeler_finite_photon_beam_electron_theta.csv";
67 }
68
69 std::filesystem::path referenceFinitePhotonBeamPositronThetaPath() {
70 return std::filesystem::path(OPALX_TEST_SOURCE_DIR) / "data"
71 / "cain_linear_breit_wheeler_finite_photon_beam_positron_theta.csv";
72 }
73
74 std::filesystem::path referenceFinitePhotonBeamElectronJointPath() {
75 return std::filesystem::path(OPALX_TEST_SOURCE_DIR) / "data"
76 / "cain_linear_breit_wheeler_finite_photon_beam_electron_joint.csv";
77 }
78
79 std::filesystem::path referenceFinitePhotonBeamPositronJointPath() {
80 return std::filesystem::path(OPALX_TEST_SOURCE_DIR) / "data"
81 / "cain_linear_breit_wheeler_finite_photon_beam_positron_joint.csv";
82 }
83
84 std::filesystem::path referenceFinitePhotonBeamEnergySpreadElectronEnergyPath() {
85 return std::filesystem::path(OPALX_TEST_SOURCE_DIR) / "data"
86 / "cain_linear_breit_wheeler_finite_photon_beam_energy_spread_electron_energy.csv";
87 }
88
89 std::filesystem::path referenceFinitePhotonBeamEnergySpreadPositronEnergyPath() {
90 return std::filesystem::path(OPALX_TEST_SOURCE_DIR) / "data"
91 / "cain_linear_breit_wheeler_finite_photon_beam_energy_spread_positron_energy.csv";
92 }
93
94 std::filesystem::path referenceFinitePhotonBeamEnergySpreadElectronThetaPath() {
95 return std::filesystem::path(OPALX_TEST_SOURCE_DIR) / "data"
96 / "cain_linear_breit_wheeler_finite_photon_beam_energy_spread_electron_theta.csv";
97 }
98
99 std::filesystem::path referenceFinitePhotonBeamEnergySpreadPositronThetaPath() {
100 return std::filesystem::path(OPALX_TEST_SOURCE_DIR) / "data"
101 / "cain_linear_breit_wheeler_finite_photon_beam_energy_spread_positron_theta.csv";
102 }
103
104 std::filesystem::path referenceFinitePhotonBeamEnergySpreadElectronJointPath() {
105 return std::filesystem::path(OPALX_TEST_SOURCE_DIR) / "data"
106 / "cain_linear_breit_wheeler_finite_photon_beam_energy_spread_electron_joint.csv";
107 }
108
109 std::filesystem::path referenceFinitePhotonBeamEnergySpreadPositronJointPath() {
110 return std::filesystem::path(OPALX_TEST_SOURCE_DIR) / "data"
111 / "cain_linear_breit_wheeler_finite_photon_beam_energy_spread_positron_joint.csv";
112 }
113
114 std::filesystem::path referenceOverlapElectronEnergyPath() {
115 return std::filesystem::path(OPALX_TEST_SOURCE_DIR) / "data"
116 / "cain_linear_breit_wheeler_overlap_electron_energy.csv";
117 }
118
119 std::filesystem::path referenceOverlapPositronEnergyPath() {
120 return std::filesystem::path(OPALX_TEST_SOURCE_DIR) / "data"
121 / "cain_linear_breit_wheeler_overlap_positron_energy.csv";
122 }
123
124 std::filesystem::path referenceOverlapElectronThetaPath() {
125 return std::filesystem::path(OPALX_TEST_SOURCE_DIR) / "data"
126 / "cain_linear_breit_wheeler_overlap_electron_theta.csv";
127 }
128
129 std::filesystem::path referenceOverlapPositronThetaPath() {
130 return std::filesystem::path(OPALX_TEST_SOURCE_DIR) / "data"
131 / "cain_linear_breit_wheeler_overlap_positron_theta.csv";
132 }
133} // namespace
134
135TEST(TestLinearBreitWheelerSpectrum, ElectronEnergySpectrumMatchesCainReference) {
136 const int previousSeed = Options::seed;
137 Options::seed = 13579;
138
140 config.minValue = 0.0;
141 config.maxValue = 0.5;
145 const auto cain = LinearBreitWheelerBenchmark::readHistogramCSV(referenceElectronEnergyPath());
146
147 ASSERT_EQ(opalx.centers.size(), cain.centers.size());
148 EXPECT_NEAR(LinearBreitWheelerBenchmark::histogramArea(opalx), 1.0, 1.5e-2);
149 EXPECT_NEAR(LinearBreitWheelerBenchmark::histogramArea(cain), 1.0, 5.0e-4);
150 EXPECT_NEAR(
155
156 Options::seed = previousSeed;
157}
158
159TEST(TestLinearBreitWheelerSpectrum, PositronEnergySpectrumMatchesCainReference) {
160 const int previousSeed = Options::seed;
161 Options::seed = 13579;
162
164 config.minValue = 0.0;
165 config.maxValue = 0.5;
169 const auto cain = LinearBreitWheelerBenchmark::readHistogramCSV(referencePositronEnergyPath());
170
171 ASSERT_EQ(opalx.centers.size(), cain.centers.size());
172 EXPECT_NEAR(LinearBreitWheelerBenchmark::histogramArea(opalx), 1.0, 1.5e-2);
173 EXPECT_NEAR(LinearBreitWheelerBenchmark::histogramArea(cain), 1.0, 5.0e-4);
174 EXPECT_NEAR(
179
180 Options::seed = previousSeed;
181}
182
183TEST(TestLinearBreitWheelerSpectrum, ElectronAngularSpectrumMatchesCainReference) {
184 const int previousSeed = Options::seed;
185 Options::seed = 13579;
186
188 config.minValue = 0.0;
189 config.maxValue = 0.0045;
193 const auto cain = LinearBreitWheelerBenchmark::readHistogramCSV(referenceElectronThetaPath());
194
195 ASSERT_EQ(opalx.centers.size(), cain.centers.size());
196 EXPECT_NEAR(LinearBreitWheelerBenchmark::histogramArea(opalx), 1.0, 2.0e-2);
197 EXPECT_NEAR(LinearBreitWheelerBenchmark::histogramArea(cain), 1.0, 5.0e-4);
198 EXPECT_NEAR(
203
204 Options::seed = previousSeed;
205}
206
207TEST(TestLinearBreitWheelerSpectrum, PositronAngularSpectrumMatchesCainReference) {
208 const int previousSeed = Options::seed;
209 Options::seed = 13579;
210
212 config.minValue = 0.0;
213 config.maxValue = 0.0045;
217 const auto cain = LinearBreitWheelerBenchmark::readHistogramCSV(referencePositronThetaPath());
218
219 ASSERT_EQ(opalx.centers.size(), cain.centers.size());
220 EXPECT_NEAR(LinearBreitWheelerBenchmark::histogramArea(opalx), 1.0, 2.0e-2);
221 EXPECT_NEAR(LinearBreitWheelerBenchmark::histogramArea(cain), 1.0, 5.0e-4);
222 EXPECT_NEAR(
227
228 Options::seed = previousSeed;
229}
230
231TEST(TestLinearBreitWheelerSpectrum, ElectronJointSpectrumMatchesCainReference) {
232 const int previousSeed = Options::seed;
233 Options::seed = 13579;
234
238 const auto cain =
239 LinearBreitWheelerBenchmark::readJointHistogramCSV(referenceElectronJointPath());
240
241 ASSERT_EQ(opalx.energyCentersGeV.size(), cain.energyCentersGeV.size());
242 ASSERT_EQ(opalx.thetaCentersRad.size(), cain.thetaCentersRad.size());
244 EXPECT_NEAR(LinearBreitWheelerBenchmark::jointHistogramArea(cain), 1.0, 2.0e-3);
245 EXPECT_NEAR(
249 EXPECT_NEAR(
254
255 Options::seed = previousSeed;
256}
257
258TEST(TestLinearBreitWheelerSpectrum, PositronJointSpectrumMatchesCainReference) {
259 const int previousSeed = Options::seed;
260 Options::seed = 13579;
261
265 const auto cain =
266 LinearBreitWheelerBenchmark::readJointHistogramCSV(referencePositronJointPath());
267
268 ASSERT_EQ(opalx.energyCentersGeV.size(), cain.energyCentersGeV.size());
269 ASSERT_EQ(opalx.thetaCentersRad.size(), cain.thetaCentersRad.size());
271 EXPECT_NEAR(LinearBreitWheelerBenchmark::jointHistogramArea(cain), 1.0, 2.0e-3);
272 EXPECT_NEAR(
276 EXPECT_NEAR(
281
282 Options::seed = previousSeed;
283}
284
285TEST(TestLinearBreitWheelerSpectrum, FinitePhotonBeamElectronEnergySpectrumMatchesCainReference) {
286 const int previousSeed = Options::seed;
287 Options::seed = 13579;
288
290 config.minValue = 0.0;
291 config.maxValue = 0.5;
292 config.sigmaThetaXRad = 1.0e-3;
293 config.sigmaThetaYRad = 1.0e-3;
298 referenceFinitePhotonBeamElectronEnergyPath());
299
300 ASSERT_EQ(opalx.centers.size(), cain.centers.size());
301 EXPECT_NEAR(LinearBreitWheelerBenchmark::histogramArea(opalx), 1.0, 2.0e-2);
302 EXPECT_NEAR(LinearBreitWheelerBenchmark::histogramArea(cain), 1.0, 5.0e-4);
303 EXPECT_NEAR(
308
309 Options::seed = previousSeed;
310}
311
312TEST(TestLinearBreitWheelerSpectrum, FinitePhotonBeamPositronEnergySpectrumMatchesCainReference) {
313 const int previousSeed = Options::seed;
314 Options::seed = 13579;
315
317 config.minValue = 0.0;
318 config.maxValue = 0.5;
319 config.sigmaThetaXRad = 1.0e-3;
320 config.sigmaThetaYRad = 1.0e-3;
325 referenceFinitePhotonBeamPositronEnergyPath());
326
327 ASSERT_EQ(opalx.centers.size(), cain.centers.size());
328 EXPECT_NEAR(LinearBreitWheelerBenchmark::histogramArea(opalx), 1.0, 2.0e-2);
329 EXPECT_NEAR(LinearBreitWheelerBenchmark::histogramArea(cain), 1.0, 5.0e-4);
330 EXPECT_NEAR(
335
336 Options::seed = previousSeed;
337}
338
339TEST(TestLinearBreitWheelerSpectrum, FinitePhotonBeamElectronAngularSpectrumMatchesCainReference) {
340 const int previousSeed = Options::seed;
341 Options::seed = 13579;
342
344 config.minValue = 0.0;
345 config.maxValue = 0.0060;
346 config.sigmaThetaXRad = 1.0e-3;
347 config.sigmaThetaYRad = 1.0e-3;
352 referenceFinitePhotonBeamElectronThetaPath());
353
354 ASSERT_EQ(opalx.centers.size(), cain.centers.size());
355 EXPECT_NEAR(LinearBreitWheelerBenchmark::histogramArea(opalx), 1.0, 2.5e-2);
356 EXPECT_NEAR(LinearBreitWheelerBenchmark::histogramArea(cain), 1.0, 4.0e-3);
357 EXPECT_NEAR(
362
363 Options::seed = previousSeed;
364}
365
366TEST(TestLinearBreitWheelerSpectrum, FinitePhotonBeamPositronAngularSpectrumMatchesCainReference) {
367 const int previousSeed = Options::seed;
368 Options::seed = 13579;
369
371 config.minValue = 0.0;
372 config.maxValue = 0.0060;
373 config.sigmaThetaXRad = 1.0e-3;
374 config.sigmaThetaYRad = 1.0e-3;
379 referenceFinitePhotonBeamPositronThetaPath());
380
381 ASSERT_EQ(opalx.centers.size(), cain.centers.size());
382 EXPECT_NEAR(LinearBreitWheelerBenchmark::histogramArea(opalx), 1.0, 2.5e-2);
383 EXPECT_NEAR(LinearBreitWheelerBenchmark::histogramArea(cain), 1.0, 4.0e-3);
384 EXPECT_NEAR(
389
390 Options::seed = previousSeed;
391}
392
393TEST(TestLinearBreitWheelerSpectrum, FinitePhotonBeamElectronJointSpectrumMatchesCainReference) {
394 const int previousSeed = Options::seed;
395 Options::seed = 13579;
396
398 config.energyMinGeV = 0.0;
399 config.energyMaxGeV = 0.5;
400 config.thetaMinRad = 0.0;
401 config.thetaMaxRad = 0.0060;
402 config.sigmaThetaXRad = 1.0e-3;
403 config.sigmaThetaYRad = 1.0e-3;
407 referenceFinitePhotonBeamElectronJointPath());
408
409 ASSERT_EQ(opalx.energyCentersGeV.size(), cain.energyCentersGeV.size());
410 ASSERT_EQ(opalx.thetaCentersRad.size(), cain.thetaCentersRad.size());
412 EXPECT_NEAR(LinearBreitWheelerBenchmark::jointHistogramArea(cain), 1.0, 4.0e-3);
413 EXPECT_NEAR(
417 EXPECT_NEAR(
422
423 Options::seed = previousSeed;
424}
425
426TEST(TestLinearBreitWheelerSpectrum, FinitePhotonBeamPositronJointSpectrumMatchesCainReference) {
427 const int previousSeed = Options::seed;
428 Options::seed = 13579;
429
431 config.energyMinGeV = 0.0;
432 config.energyMaxGeV = 0.5;
433 config.thetaMinRad = 0.0;
434 config.thetaMaxRad = 0.0060;
435 config.sigmaThetaXRad = 1.0e-3;
436 config.sigmaThetaYRad = 1.0e-3;
440 referenceFinitePhotonBeamPositronJointPath());
441
442 ASSERT_EQ(opalx.energyCentersGeV.size(), cain.energyCentersGeV.size());
443 ASSERT_EQ(opalx.thetaCentersRad.size(), cain.thetaCentersRad.size());
445 EXPECT_NEAR(LinearBreitWheelerBenchmark::jointHistogramArea(cain), 1.0, 4.0e-3);
446 EXPECT_NEAR(
450 EXPECT_NEAR(
455
456 Options::seed = previousSeed;
457}
458
459TEST(TestLinearBreitWheelerSpectrum,
460 FinitePhotonBeamEnergySpreadElectronEnergySpectrumMatchesCainReference) {
461 const int previousSeed = Options::seed;
462 Options::seed = 13579;
463
465 config.minValue = 0.0;
466 config.maxValue = 0.5;
467 config.sigmaThetaXRad = 1.0e-3;
468 config.sigmaThetaYRad = 1.0e-3;
469 config.relativeEnergySpread = 1.0e-3;
474 referenceFinitePhotonBeamEnergySpreadElectronEnergyPath());
475
476 ASSERT_EQ(opalx.centers.size(), cain.centers.size());
477 EXPECT_NEAR(LinearBreitWheelerBenchmark::histogramArea(opalx), 1.0, 2.0e-2);
478 EXPECT_NEAR(LinearBreitWheelerBenchmark::histogramArea(cain), 1.0, 5.0e-4);
479 EXPECT_NEAR(
484
485 Options::seed = previousSeed;
486}
487
488TEST(TestLinearBreitWheelerSpectrum,
489 FinitePhotonBeamEnergySpreadPositronEnergySpectrumMatchesCainReference) {
490 const int previousSeed = Options::seed;
491 Options::seed = 13579;
492
494 config.minValue = 0.0;
495 config.maxValue = 0.5;
496 config.sigmaThetaXRad = 1.0e-3;
497 config.sigmaThetaYRad = 1.0e-3;
498 config.relativeEnergySpread = 1.0e-3;
503 referenceFinitePhotonBeamEnergySpreadPositronEnergyPath());
504
505 ASSERT_EQ(opalx.centers.size(), cain.centers.size());
506 EXPECT_NEAR(LinearBreitWheelerBenchmark::histogramArea(opalx), 1.0, 2.0e-2);
507 EXPECT_NEAR(LinearBreitWheelerBenchmark::histogramArea(cain), 1.0, 5.0e-4);
508 EXPECT_NEAR(
513
514 Options::seed = previousSeed;
515}
516
517TEST(TestLinearBreitWheelerSpectrum,
518 FinitePhotonBeamEnergySpreadElectronAngularSpectrumMatchesCainReference) {
519 const int previousSeed = Options::seed;
520 Options::seed = 13579;
521
523 config.minValue = 0.0;
524 config.maxValue = 0.0060;
525 config.sigmaThetaXRad = 1.0e-3;
526 config.sigmaThetaYRad = 1.0e-3;
527 config.relativeEnergySpread = 1.0e-3;
532 referenceFinitePhotonBeamEnergySpreadElectronThetaPath());
533
534 ASSERT_EQ(opalx.centers.size(), cain.centers.size());
535 EXPECT_NEAR(LinearBreitWheelerBenchmark::histogramArea(opalx), 1.0, 2.5e-2);
536 EXPECT_NEAR(LinearBreitWheelerBenchmark::histogramArea(cain), 1.0, 4.0e-3);
537 EXPECT_NEAR(
542
543 Options::seed = previousSeed;
544}
545
546TEST(TestLinearBreitWheelerSpectrum,
547 FinitePhotonBeamEnergySpreadPositronAngularSpectrumMatchesCainReference) {
548 const int previousSeed = Options::seed;
549 Options::seed = 13579;
550
552 config.minValue = 0.0;
553 config.maxValue = 0.0060;
554 config.sigmaThetaXRad = 1.0e-3;
555 config.sigmaThetaYRad = 1.0e-3;
556 config.relativeEnergySpread = 1.0e-3;
561 referenceFinitePhotonBeamEnergySpreadPositronThetaPath());
562
563 ASSERT_EQ(opalx.centers.size(), cain.centers.size());
564 EXPECT_NEAR(LinearBreitWheelerBenchmark::histogramArea(opalx), 1.0, 2.5e-2);
565 EXPECT_NEAR(LinearBreitWheelerBenchmark::histogramArea(cain), 1.0, 4.0e-3);
566 EXPECT_NEAR(
571
572 Options::seed = previousSeed;
573}
574
575TEST(TestLinearBreitWheelerSpectrum,
576 FinitePhotonBeamEnergySpreadElectronJointSpectrumMatchesCainReference) {
577 const int previousSeed = Options::seed;
578 Options::seed = 13579;
579
581 config.energyMinGeV = 0.0;
582 config.energyMaxGeV = 0.5;
583 config.thetaMinRad = 0.0;
584 config.thetaMaxRad = 0.0060;
585 config.sigmaThetaXRad = 1.0e-3;
586 config.sigmaThetaYRad = 1.0e-3;
587 config.relativeEnergySpread = 1.0e-3;
591 referenceFinitePhotonBeamEnergySpreadElectronJointPath());
592
593 ASSERT_EQ(opalx.energyCentersGeV.size(), cain.energyCentersGeV.size());
594 ASSERT_EQ(opalx.thetaCentersRad.size(), cain.thetaCentersRad.size());
596 EXPECT_NEAR(LinearBreitWheelerBenchmark::jointHistogramArea(cain), 1.0, 4.0e-3);
597 EXPECT_NEAR(
601 EXPECT_NEAR(
606
607 Options::seed = previousSeed;
608}
609
610TEST(TestLinearBreitWheelerSpectrum,
611 FinitePhotonBeamEnergySpreadPositronJointSpectrumMatchesCainReference) {
612 const int previousSeed = Options::seed;
613 Options::seed = 13579;
614
616 config.energyMinGeV = 0.0;
617 config.energyMaxGeV = 0.5;
618 config.thetaMinRad = 0.0;
619 config.thetaMaxRad = 0.0060;
620 config.sigmaThetaXRad = 1.0e-3;
621 config.sigmaThetaYRad = 1.0e-3;
622 config.relativeEnergySpread = 1.0e-3;
626 referenceFinitePhotonBeamEnergySpreadPositronJointPath());
627
628 ASSERT_EQ(opalx.energyCentersGeV.size(), cain.energyCentersGeV.size());
629 ASSERT_EQ(opalx.thetaCentersRad.size(), cain.thetaCentersRad.size());
631 EXPECT_NEAR(LinearBreitWheelerBenchmark::jointHistogramArea(cain), 1.0, 4.0e-3);
632 EXPECT_NEAR(
636 EXPECT_NEAR(
641
642 Options::seed = previousSeed;
643}
644
645TEST(TestLinearBreitWheelerSpectrum, OverlapWeightedElectronEnergySpectrumMatchesCainReference) {
646 const int previousSeed = Options::seed;
647 Options::seed = 13579;
648
650 config.minValue = 0.0;
651 config.maxValue = 0.5;
652 config.sigmaThetaXRad = 1.0e-3;
653 config.sigmaThetaYRad = 1.0e-3;
654 config.sigmaX_m = 1.0e-6;
655 config.sigmaY_m = 1.0e-6;
656 config.sigmaS_m = 5.0e-12 * Physics::c;
657 config.laserRayleighX_m = 1.0e-6;
658 config.laserRayleighY_m = 1.0e-6;
659 config.laserSigmaT_m = 5.0e-12 * Physics::c;
660 config.overlapWeighting = true;
664 const auto cain =
665 LinearBreitWheelerBenchmark::readHistogramCSV(referenceOverlapElectronEnergyPath());
666
667 ASSERT_EQ(opalx.centers.size(), cain.centers.size());
668 EXPECT_NEAR(LinearBreitWheelerBenchmark::histogramArea(opalx), 1.0, 2.0e-2);
669 EXPECT_NEAR(
674
675 Options::seed = previousSeed;
676}
677
678TEST(TestLinearBreitWheelerSpectrum, OverlapWeightedPositronEnergySpectrumMatchesCainReference) {
679 const int previousSeed = Options::seed;
680 Options::seed = 13579;
681
683 config.minValue = 0.0;
684 config.maxValue = 0.5;
685 config.sigmaThetaXRad = 1.0e-3;
686 config.sigmaThetaYRad = 1.0e-3;
687 config.sigmaX_m = 1.0e-6;
688 config.sigmaY_m = 1.0e-6;
689 config.sigmaS_m = 5.0e-12 * Physics::c;
690 config.laserRayleighX_m = 1.0e-6;
691 config.laserRayleighY_m = 1.0e-6;
692 config.laserSigmaT_m = 5.0e-12 * Physics::c;
693 config.overlapWeighting = true;
697 const auto cain =
698 LinearBreitWheelerBenchmark::readHistogramCSV(referenceOverlapPositronEnergyPath());
699
700 ASSERT_EQ(opalx.centers.size(), cain.centers.size());
701 EXPECT_NEAR(LinearBreitWheelerBenchmark::histogramArea(opalx), 1.0, 2.0e-2);
702 EXPECT_NEAR(
707
708 Options::seed = previousSeed;
709}
710
711TEST(TestLinearBreitWheelerSpectrum, OverlapWeightedElectronAngularSpectrumMatchesCainReference) {
712 const int previousSeed = Options::seed;
713 Options::seed = 13579;
714
716 config.minValue = 0.0;
717 config.maxValue = 0.0060;
718 config.sigmaThetaXRad = 1.0e-3;
719 config.sigmaThetaYRad = 1.0e-3;
720 config.sigmaX_m = 1.0e-6;
721 config.sigmaY_m = 1.0e-6;
722 config.sigmaS_m = 5.0e-12 * Physics::c;
723 config.laserRayleighX_m = 1.0e-6;
724 config.laserRayleighY_m = 1.0e-6;
725 config.laserSigmaT_m = 5.0e-12 * Physics::c;
726 config.overlapWeighting = true;
730 const auto cain =
731 LinearBreitWheelerBenchmark::readHistogramCSV(referenceOverlapElectronThetaPath());
732
733 ASSERT_EQ(opalx.centers.size(), cain.centers.size());
734 EXPECT_NEAR(LinearBreitWheelerBenchmark::histogramArea(opalx), 1.0, 2.5e-2);
735 EXPECT_NEAR(
740
741 Options::seed = previousSeed;
742}
743
744TEST(TestLinearBreitWheelerSpectrum, OverlapWeightedPositronAngularSpectrumMatchesCainReference) {
745 const int previousSeed = Options::seed;
746 Options::seed = 13579;
747
749 config.minValue = 0.0;
750 config.maxValue = 0.0060;
751 config.sigmaThetaXRad = 1.0e-3;
752 config.sigmaThetaYRad = 1.0e-3;
753 config.sigmaX_m = 1.0e-6;
754 config.sigmaY_m = 1.0e-6;
755 config.sigmaS_m = 5.0e-12 * Physics::c;
756 config.laserRayleighX_m = 1.0e-6;
757 config.laserRayleighY_m = 1.0e-6;
758 config.laserSigmaT_m = 5.0e-12 * Physics::c;
759 config.overlapWeighting = true;
763 const auto cain =
764 LinearBreitWheelerBenchmark::readHistogramCSV(referenceOverlapPositronThetaPath());
765
766 ASSERT_EQ(opalx.centers.size(), cain.centers.size());
767 EXPECT_NEAR(LinearBreitWheelerBenchmark::histogramArea(opalx), 1.0, 2.5e-2);
768 EXPECT_NEAR(
773
774 Options::seed = previousSeed;
775}
TEST(TestLinearBreitWheelerSpectrum, ElectronEnergySpectrumMatchesCainReference)
double histogramMean(const Histogram &histogram)
double histogramL1Distance(const Histogram &lhs, const Histogram &rhs)
JointHistogram sampleFinitePhotonBeamJointHistogram(const FinitePhotonBeamJointConfig &config, FinalState state, std::size_t sampleCount, std::uint64_t streamIndex=0)
Sample the joint Breit-Wheeler laboratory distribution in energy and polar angle.
Histogram sampleFinitePhotonBeamHistogram(const FinitePhotonBeamConfig &config, FinalState state, Observable observable, std::size_t sampleCount, std::uint64_t streamIndex=0)
Sample a one-dimensional Breit-Wheeler histogram for a finite incoming photon beam.
Histogram sampleHistogram(const HistogramConfig &config, FinalState state, Observable observable, std::size_t sampleCount, std::uint64_t streamIndex=0)
Sample a one-dimensional Breit-Wheeler benchmark histogram.
JointHistogram sampleJointHistogram(const JointHistogramConfig &config, FinalState state, std::size_t sampleCount, std::uint64_t streamIndex=0)
double jointHistogramMeanEnergyGeV(const JointHistogram &histogram)
double histogramArea(const Histogram &histogram)
JointHistogram readJointHistogramCSV(const std::filesystem::path &inputPath)
double jointHistogramL1Distance(const JointHistogram &lhs, const JointHistogram &rhs)
double jointHistogramArea(const JointHistogram &histogram)
Histogram readHistogramCSV(const std::filesystem::path &inputPath)
double jointHistogramMeanThetaRad(const JointHistogram &histogram)
Configuration for folding the linear Breit-Wheeler kernel over a finite incoming photon beam.
int seed
The current random seed.
Definition Options.cpp:37
constexpr double c
The velocity of light in m/s.
Definition Physics.h:60