ATLAS Offline Software
Loading...
Searching...
No Matches
RadiationMapsMaker.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3*/
4
5#ifndef G4UserActions_RadiationMapsMaker_H
6#define G4UserActions_RadiationMapsMaker_H
7
8#include <vector>
9#include <string>
10#include <fstream>
11#include "G4UserRunAction.hh"
12#include "G4UserSteppingAction.hh"
13
14class TGraph;
15
16namespace G4UA
17{
18
20 public G4UserRunAction,
21 public G4UserSteppingAction
22 {
23
24 public:
25
26 struct Config
27 {
31
32 std::vector<std::string> materials;
33
34 std::string activationFileName = std::string("");
35
36 bool posYOnly = false; // set to true for upper hemisphere only
37
38 int nBinsr = 120;
39 int nBinsz = 240;
40
41 double rMinZoom = 0.; // cm
42 double rMinFull = 0.; // cm
43
44 double rMaxZoom = 480.; // cm
45 double rMaxFull = 1200.; // cm
46
47 double zMinZoom = 0.; // cm
48 double zMinFull = 0.; // cm
49
50 double zMaxZoom = 960.; // cm
51 double zMaxFull = 2400.; // cm
52
53 int nBinsr3d = 30;
54 int nBinsz3d = 60;
55 int nBinsphi3d = 32;
56
57 double phiMinZoom = -180.; // degrees
58 double phiMaxZoom = 180.; // degrees
59
60 // theta x dphi bins are used in the theta-spectra
61
62 int nBinsdphi = 18; // 0 degrees <= dphi < 360 degrees
63 int nBinstheta = 9;
64
65 double thetaMin = 0.; // degrees
66 double thetaMax = 90.; // degrees
67
68 // neutron spectra
69 int nBinslogEn = 90;
70 double logEMinn = -11.; // min log10(E_kin/MeV)
71 double logEMaxn = 7.; // max log10(E_kin/MeV)
72
73 // particle spectra for gamma,e^+/-,mu^+/-,pi^+/-,p,rest
74 int nBinslogEo = 45;
75 double logEMino = -2.; // min log10(E_kin/MeV)
76 double logEMaxo = 7.; // max log10(E_kin/MeV)
77
78 // time dependent TID maps
79 int nBinslogT = 20;
80 double logTMin = -9.; // log10(t_cut/s); first bin for t < 1 ns
81 double logTMax = 11.; // log10(t_cut/s); last bin for t < 3169 a
82
83 // elements mass fraction maps
84 int elemZMin = 1; // minimum Z to keep mass fraction
85 int elemZMax = 92; // maximum Z to keep mass fraction
86 };
87
88
90 struct Report
91 {
93 std::vector<double> m_rz_tid;
95 std::vector<double> m_rz_eion;
97 std::vector<double> m_rz_niel;
99 std::vector<double> m_rz_h20;
101 std::vector<double> m_rz_neut;
103 std::vector<double> m_rz_chad;
104
106
108 std::vector<double> m_rz_vol;
110 std::vector<double> m_rz_norm;
111
113 std::vector<double> m_full_rz_tid;
115 std::vector<double> m_full_rz_eion;
117 std::vector<double> m_full_rz_niel;
119 std::vector<double> m_full_rz_h20;
121 std::vector<double> m_full_rz_neut;
123 std::vector<double> m_full_rz_chad;
124
126
128 std::vector<double> m_full_rz_vol;
130 std::vector<double> m_full_rz_norm;
131
133 std::vector<double> m_3d_tid;
135 std::vector<double> m_3d_eion;
137 std::vector<double> m_3d_niel;
139 std::vector<double> m_3d_h20;
141 std::vector<double> m_3d_neut;
143 std::vector<double> m_3d_chad;
144
146
148 std::vector<double> m_3d_vol;
150 std::vector<double> m_3d_norm;
151
152 // particle spectra
153
154 // neutrons
155
157 std::vector<double> m_rz_neut_spec;
159 std::vector<double> m_full_rz_neut_spec;
161 std::vector<double> m_theta_full_rz_neut_spec;
162
163 // gamma
164
166 std::vector<double> m_rz_gamm_spec;
168 std::vector<double> m_full_rz_gamm_spec;
170 std::vector<double> m_theta_full_rz_gamm_spec;
171
172 // e^+/-
173
175 std::vector<double> m_rz_elec_spec;
177 std::vector<double> m_full_rz_elec_spec;
179 std::vector<double> m_theta_full_rz_elec_spec;
180
181 // mu^+/-
182
184 std::vector<double> m_rz_muon_spec;
186 std::vector<double> m_full_rz_muon_spec;
188 std::vector<double> m_theta_full_rz_muon_spec;
189
190 // pi^+/-
191
193 std::vector<double> m_rz_pion_spec;
195 std::vector<double> m_full_rz_pion_spec;
197 std::vector<double> m_theta_full_rz_pion_spec;
198
199 // proton
200
202 std::vector<double> m_rz_prot_spec;
204 std::vector<double> m_full_rz_prot_spec;
206 std::vector<double> m_theta_full_rz_prot_spec;
207
208 // rest
209
211 std::vector<double> m_rz_rest_spec;
213 std::vector<double> m_full_rz_rest_spec;
215 std::vector<double> m_theta_full_rz_rchgd_spec;
217 std::vector<double> m_theta_full_rz_rneut_spec;
218
219 // time dependent maps
220
222 std::vector<double> m_rz_tid_time;
224 std::vector<double> m_full_rz_tid_time;
225
227 std::vector<double> m_rz_ht_time;
229 std::vector<double> m_full_rz_ht_time;
230
231 // maps of element fractions
232
234 std::vector<double> m_rz_element;
236 std::vector<double> m_full_rz_element;
237
238 void merge(const Report& maps);
239 };
240
242
244
245 // initialize maps to 0
246 virtual void BeginOfRunAction(const G4Run*) override final;
247
248 // increment radiation maps
249 virtual void UserSteppingAction(const G4Step*) override final;
250
252 const Report& getReport() const
253 { return m_maps; }
254
255 private:
256
258
260
261 TGraph * m_tgpSiA = 0;
262 TGraph * m_tgpSiB = 0;
263 TGraph * m_tgnSiA = 0;
264 TGraph * m_tgnSiB = 0;
265 TGraph * m_tgnSiC = 0;
266 TGraph * m_tgpiSi = 0;
267 TGraph * m_tgeSi = 0;
268
269 TGraph * m_tgHn = 0;
270 TGraph * m_tgHg = 0;
271 TGraph * m_tgHp = 0;
272 TGraph * m_tgHem = 0;
273 TGraph * m_tgHep = 0;
274 TGraph * m_tgHmm = 0;
275 TGraph * m_tgHmp = 0;
276 TGraph * m_tgHpm = 0;
277 TGraph * m_tgHpp = 0;
278 TGraph * m_tgHa = 0;
279
280 std::ofstream m_activationFile;
281
282 }; // class RadiationMapsMaker
283
284
285} // namespace G4UA
286
287#endif
virtual void BeginOfRunAction(const G4Run *) override final
RadiationMapsMaker(const Config &config)
const Report & getReport() const
Retrieve my maps.
virtual void UserSteppingAction(const G4Step *) override final
Definition merge.py:1
std::vector< std::string > materials
bin sizes and ranges match the requirements for the Radiation Estimate Web tool for the default value...
Simple struct for holding the radiation maps.
std::vector< double > m_3d_eion
vector of ionizing energy density seen by thread in 3d
std::vector< double > m_full_rz_tid
vector of tid seen by thread in full area
std::vector< double > m_theta_full_rz_rneut_spec
vector of rest neutral spectra in log10(E/MeV) bins and the full 2d grid x theta bins
std::vector< double > m_3d_h20
vector of >20 MeV hadron flux seen by thread in 3d
std::vector< double > m_rz_neut_spec
vector of neutron spectra in log10(E/MeV) bins and the zoom 2d grid
std::vector< double > m_3d_chad
vector of charged hadron flux seen by thread in 3d
std::vector< double > m_rz_vol
next two vectors are used only in case maps are needed for particular materials instead of all
std::vector< double > m_full_rz_muon_spec
vector of mu^+/- spectra in log10(E/MeV) bins and the full 2d grid
std::vector< double > m_3d_neut
vector of >100 keV hadron flux seen by thread in 3d
std::vector< double > m_full_rz_chad
vector of charged hadron flux seen by thread in full area
std::vector< double > m_3d_norm
vector to normalize the volume fraction in 3d
std::vector< double > m_full_rz_tid_time
vector of time dependent TID in full 2d grid
std::vector< double > m_theta_full_rz_elec_spec
vector of e^+/- spectra in log10(E/MeV) bins and the full 2d grid x theta bins
std::vector< double > m_rz_chad
vector of charged hadron flux seen by thread in zoomed area
std::vector< double > m_3d_niel
vector of 1 MeV neutron equivalent flux seen by thread in 3d
std::vector< double > m_3d_tid
vector of tid seen by thread in 3d
std::vector< double > m_rz_h20
vector of >20 MeV hadron flux seen by thread in zoomed area
std::vector< double > m_theta_full_rz_gamm_spec
vector of gamma spectra in log10(E/MeV) bins and the full 2d grid x theta bins
std::vector< double > m_full_rz_element
vector of element fractions in full 2d grid
std::vector< double > m_rz_muon_spec
vector of mu^+/- spectra in log10(E/MeV) bins and the zoom 2d grid
std::vector< double > m_full_rz_pion_spec
vector of pi^+/- spectra in log10(E/MeV) bins and the full 2d grid
std::vector< double > m_full_rz_elec_spec
vector of e^+/- spectra in log10(E/MeV) bins and the full 2d grid
std::vector< double > m_rz_tid
vector of tid seen by thread in zoomed area
std::vector< double > m_full_rz_niel
vector of 1 MeV neutron equivalent flux seen by thread in full area
std::vector< double > m_theta_full_rz_muon_spec
vector of mu^+/- spectra in log10(E/MeV) bins and the full 2d grid x theta bins
std::vector< double > m_rz_tid_time
vector of time dependent TID in zoom 2d grid
std::vector< double > m_theta_full_rz_prot_spec
vector of proton spectra in log10(E/MeV) bins and the full 2d grid x theta bins
std::vector< double > m_rz_gamm_spec
vector of gamma spectra in log10(E/MeV) bins and the zoom 2d grid
std::vector< double > m_full_rz_gamm_spec
vector of gamma spectra in log10(E/MeV) bins and the full 2d grid
std::vector< double > m_full_rz_vol
next two vectors are used only in case maps are needed for particular materials instead of all
std::vector< double > m_rz_norm
vector to normalize the volume fraction in zoomed area
std::vector< double > m_rz_ht_time
vector of time dependent H_T in zoom 2d grid
std::vector< double > m_full_rz_h20
vector of >20 MeV hadron flux seen by thread in full area
std::vector< double > m_full_rz_norm
vector to normalize the volume fraction in full area
std::vector< double > m_rz_prot_spec
vector of proton spectra in log10(E/MeV) bins and the zoom 2d grid
std::vector< double > m_3d_vol
next two vectors are used only in case maps are needed for particular materials instead of all
std::vector< double > m_rz_niel
vector of 1 MeV neutron equivalent flux seen by thread in zoomed area
std::vector< double > m_full_rz_rest_spec
vector of e^+/- spectra in log10(E/MeV) bins and the full 2d grid
std::vector< double > m_rz_neut
vector of >100 keV hadron flux seen by thread in zoomed area
std::vector< double > m_theta_full_rz_pion_spec
vector of pi^+/- spectra in log10(E/MeV) bins and the full 2d grid x theta bins
std::vector< double > m_rz_pion_spec
vector of pi^+/- spectra in log10(E/MeV) bins and the zoom 2d grid
std::vector< double > m_full_rz_neut
vector of >100 keV hadron flux seen by thread in full area
std::vector< double > m_rz_eion
vector of ionizing energy density seen by thread in zoomed area
std::vector< double > m_rz_elec_spec
vector of e^+/- spectra in log10(E/MeV) bins and the zoom 2d grid
std::vector< double > m_full_rz_ht_time
vector of time dependent H_T in full 2d grid
std::vector< double > m_theta_full_rz_rchgd_spec
vector of rest charged spectra in log10(E/MeV) bins and the full 2d grid x theta bins
std::vector< double > m_rz_rest_spec
vector of other particle spectra in log10(E/MeV) bins and the zoom 2d grid
std::vector< double > m_full_rz_prot_spec
vector of proton spectra in log10(E/MeV) bins and the full 2d grid
std::vector< double > m_full_rz_eion
vector of ionizing energy density seen by thread in full area
std::vector< double > m_full_rz_neut_spec
vector of neutron spectra in log10(E/MeV) bins and the full 2d grid
std::vector< double > m_rz_element
vector of element fractions in zoom 2d grid
std::vector< double > m_theta_full_rz_neut_spec
vector of neutron spectra in log10(E/MeV) bins and the full 2d grid x theta bins