32{
35
37
40 double E;
41 double R;
42 double z;
44 double TTS_ns;
47
48 try {
49
50 JParser<> zap(
"Program to plot PDF of Cherenkov light from muon using interpolation tables.");
51
54 zap[
'E'] =
make_field(E,
"muon energy at vertex [GeV]") = 1.0;
55 zap[
'R'] =
make_field(R,
"distance of approach [m]");
56 zap[
'z'] =
make_field(z,
"PMT z-position [m]");
57 zap[
'D'] =
make_field(dir,
"(theta, phi) of PMT [rad]");
58 zap[
'T'] =
make_field(TTS_ns,
"PMT time smearing [ns]") = 0.0;
61
62 zap(argc, argv);
63 }
64 catch(const exception &error) {
65 FATAL(error.what() << endl);
66 }
67
68
74
75 const int N = inputFile.size();
76
77 int type[N];
78 JPDF_t pdf [N];
79
80 try {
81
82 for (int i = 0; i != N; ++i) {
83
84 NOTICE(
"loading input from file " << inputFile[i] <<
"... " << flush);
85
87
88 pdf [i].load(inputFile[i].c_str());
89
90 pdf [i].setExceptionHandler(
new JFunction1D_t::JDefaultResult(
JMATH::zero));
91
92 if (TTS_ns > 0.0) {
93 pdf[i].blur(TTS_ns);
94 }
95
97 }
98 }
101 }
102
103 const double z_emission = z - R/getTanThetaC();
104 const double E_emission = gWater.getE(E, z_emission );
105
107
108 for (double dt; cin >> dt; ) {
109
110 for (int i = 0; i != N; ++i) {
111
112 JFunction1D_t::result_type
y = pdf[i](R, dir.
getTheta(), dir.
getPhi(), dt);
113
118 }
119
120 cout << setw(2) << type[i] << ' '
122 <<
FIXED(5,1) << R <<
' '
123 <<
FIXED(5,1) << z <<
' '
126 <<
FIXED(5,1) << dt <<
' '
128 }
129 }
130
131 return 0;
132 }
133
135
136 int function = 0;
137
138 if (inputFile.size() == 1 &&
getPDFType(inputFile[0]) == DIRECT_LIGHT_FROM_MUON) {
139 function = 1;
140 }
141
142 const double t0 = 0.0;
143
145
146 if (function == 1) {
147
149
151
152 } else {
153
155
157 }
158 }
159
163
164 for (int i = 1; i <= h0.GetNbinsX(); ++i) {
165
166 const double dt = h0.GetBinCenter(i) - t0;
167
169
170 for (
int j = 0;
j != N; ++
j) {
171
172 if ( E_emission > MASS_MUON* (1/COS_THETA_C_WATER) ) {
173
174 if (z_emission >= 0 && z_emission <= gWater(E)) {
175
177
182 }
184 }
185 }
186 }
187
188
189 h0.SetBinContent(i, get_value (Y));
191 h2.SetBinContent(i, get_integral (Y));
192 }
193
194 out.Write();
195 out.Close();
196}
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Data structure for angles in three dimensions.
double getTheta() const
Get theta angle.
double getPhi() const
Get phi angle.
virtual const char * what() const override
Get error message.
Utility class to parse command line options.
Multi-dimensional PDF table for arrival time of Cherenkov light.
static const JZero zero
Function object to assign zero value.
double getDeltaRaysFromMuon(const double E, const JRange< double > T_GeV=JRange< double >(DELTARAY_TMIN, DELTARAY_TMAX))
Equivalent EM-shower energy due to delta-rays per unit muon track length.
bool is_deltarays(const int pdf)
Test if given PDF type corresponds to Cherenkov light from delta-rays.
bool is_bremsstrahlung(const int pdf)
Test if given PDF type corresponds to Cherenkov light from Bremsstrahlung.
int getPDFType(const std::string &file_name)
Get PDF type.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Auxiliary data structure for floating point format specification.
Auxiliary data structure for floating point format specification.