32{
35
39
40 try {
41
42 JParser<> zap(
"Example program to histogram shower energy.");
43
47
48 zap(argc, argv);
49 }
50 catch(const exception &error) {
51 FATAL(error.what() << endl);
52 }
53
54
56
57 TH2* h0 = new TH2D("total", NULL, 24, 2.0, 10.0, 20, -5.0, 0.0);
58 TH2* h2 = (TH2*) h0->Clone("h2");
59
60 NOTICE(
"Setting up radiation tables... " << flush);
61
64
65 ntuple radiation;
66
67 const JRadiation hydrogen (JSeaWater::H .Z, JSeaWater::H .A, 40, 0.01, 0.1, 0.1);
68 const JRadiation oxygen (JSeaWater::O .Z, JSeaWater::O .A, 40, 0.01, 0.1, 0.1);
69 const JRadiation chlorine (JSeaWater::Cl.Z, JSeaWater::Cl.A, 40, 0.01, 0.1, 0.1);
70 const JRadiation sodium (JSeaWater::Na.Z, JSeaWater::Na.A, 40, 0.01, 0.1, 0.1);
71
72 shared_ptr<JRadiation> Hydrogen (make_shared<JRadiationFunction>(hydrogen, 300, 0.2, 1.0e11));
73 shared_ptr<JRadiation> Oxygen (make_shared<JRadiationFunction>(oxygen, 300, 0.2, 1.0e11));
74 shared_ptr<JRadiation> Chlorine (make_shared<JRadiationFunction>(chlorine, 300, 0.2, 1.0e11));
75 shared_ptr<JRadiation> Sodium (make_shared<JRadiationFunction>(sodium, 300, 0.2, 1.0e11));
76
77 radiation.push_back(tuple(make_shared<JRadiationSource>(11, Oxygen, DENSITY_SEA_WATER * JSeaWater::O(), JRadiation::EErad_t), (TH2D*) h0->Clone("[eerad O]" )));
78 radiation.push_back(tuple(make_shared<JRadiationSource>(12, Chlorine, DENSITY_SEA_WATER * JSeaWater::Cl(), JRadiation::EErad_t), (TH2D*) h0->Clone("[eerad Cl]")));
79 radiation.push_back(tuple(make_shared<JRadiationSource>(13, Hydrogen, DENSITY_SEA_WATER * JSeaWater::H(), JRadiation::EErad_t), (TH2D*) h0->Clone("[eerad H]" )));
80 radiation.push_back(tuple(make_shared<JRadiationSource>(14, Sodium, DENSITY_SEA_WATER * JSeaWater::Na(), JRadiation::EErad_t), (TH2D*) h0->Clone("[eerad Na]")));
81
82 radiation.push_back(tuple(make_shared<JRadiationSource>(21, Oxygen, DENSITY_SEA_WATER * JSeaWater::O(), JRadiation::Brems_t), (TH2D*) h0->Clone("[Brems O]" )));
83 radiation.push_back(tuple(make_shared<JRadiationSource>(22, Chlorine, DENSITY_SEA_WATER * JSeaWater::Cl(), JRadiation::Brems_t), (TH2D*) h0->Clone("[Brems Cl]")));
84 radiation.push_back(tuple(make_shared<JRadiationSource>(23, Hydrogen, DENSITY_SEA_WATER * JSeaWater::H(), JRadiation::Brems_t), (TH2D*) h0->Clone("[Brems H]" )));
85 radiation.push_back(tuple(make_shared<JRadiationSource>(24, Sodium, DENSITY_SEA_WATER * JSeaWater::Na(), JRadiation::Brems_t), (TH2D*) h0->Clone("[Brems Na]")));
86
87 radiation.push_back(tuple(make_shared<JRadiationSource>(31, Oxygen, DENSITY_SEA_WATER * JSeaWater::O(), JRadiation::GNrad_t), (TH2D*) h0->Clone("[gnrad O]" )));
88 radiation.push_back(tuple(make_shared<JRadiationSource>(32, Chlorine, DENSITY_SEA_WATER * JSeaWater::Cl(), JRadiation::GNrad_t), (TH2D*) h0->Clone("[gnrad Cl]")));
89 radiation.push_back(tuple(make_shared<JRadiationSource>(33, Hydrogen, DENSITY_SEA_WATER * JSeaWater::H(), JRadiation::GNrad_t), (TH2D*) h0->Clone("[gnrad H]" )));
90 radiation.push_back(tuple(make_shared<JRadiationSource>(34, Sodium, DENSITY_SEA_WATER * JSeaWater::Na(), JRadiation::GNrad_t), (TH2D*) h0->Clone("[gnrad Na]")));
91
93
94 for (int i = 1; i <= h0->GetXaxis()->GetNbins(); ++i) {
95
96 const double x = h0->GetXaxis()->GetBinCenter(i);
97 const double E =
pow(10.0, x);
99
101
102 for (ntuple::iterator p = radiation.begin(); p != radiation.end(); ++p) {
103
105
106 const double li = p->first->getInverseInteractionLength(E);
107 const double Es = p->first->getEnergyOfShower(E);
108 const double y = log10(Es/E);
109
110 p->second->Fill(x, y, W);
111
112 h2->Fill(x, y, li * W);
113 }
114 }
116 }
117
118 delete h0;
119
120 out.Write();
121 out.Close();
122}
#define DEBUG(A)
Message macros.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Utility class to parse command line options.
Auxiliary class for the calculation of the muon radiative cross sections.
T pow(const T &x, const double y)
Power .
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Auxiliary data structure for floating point format specification.