31int main(
int argc,
char* argv[])
42 JParser<> zap(
"Example program to histogram shower energy.");
50 catch(
const exception &error) {
51 FATAL(error.what() << endl);
57 TH2* h0 =
new TH2D(
"total", NULL, 24, 2.0, 10.0, 20, -5.0, 0.0);
58 TH2* h2 = (TH2*) h0->Clone(
"h2");
60 NOTICE(
"Setting up radiation tables... " << flush);
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);
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));
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]")));
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]")));
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]")));
94 for (
int i = 1; i <= h0->GetXaxis()->GetNbins(); ++i) {
96 const double x = h0->GetXaxis()->GetBinCenter(i);
97 const double E = pow(10.0, x);
102 for (ntuple::iterator p = radiation.begin(); p != radiation.end(); ++p) {
106 const double li = p->first->getInverseInteractionLength(E);
107 const double Es = p->first->getEnergyOfShower(E);
108 const double y = log10(Es/E);
110 p->second->Fill(x, y, W);
112 h2->Fill(x, y, li * W);