31int main(
int argc,
char **argv)
61 JParser<> zap(
"Auxiliary program to draw PDF of Cherenkov light from muon.");
64 <<
"possible options absorptionLength: " << get_keys(absorptionLength) << endl
65 <<
"possible options scatteringLength: " << get_keys(scatteringLength) << endl
66 <<
"possible options scatteringProbability: " << get_keys(scatteringProbability) << endl) =
JPARSER::initialised();
69 zap[
'e'] =
make_field(epsilon,
"precision for integration") = 1.0e-10;
70 zap[
'E'] =
make_field(E,
"muon energy at vertex [GeV]") = 1.0;
71 zap[
'R'] =
make_field(R,
"distance of approach [m]");
72 zap[
'z'] =
make_field(z,
"PMT z-position [m]");
73 zap[
'D'] =
make_field(dir,
"(theta, phi) of PMT [rad]");
80 catch(
const exception &error) {
81 FATAL(error.what() << endl);
86 pdf(NAMESPACE::getPhotocathodeArea(),
88 NAMESPACE::getAngularAcceptance,
89 JAbsorptionLength::getAbsorptionLength,
90 JScatteringLength::getScatteringLength,
91 JScatteringProbability::getScatteringProbability,
92 NAMESPACE::getAmbientPressure(),
93 getMinimalWavelength(),
94 getMaximalWavelength(),
98 const double z_0 = z - R/getTanThetaC();
99 const double E_0 = gWater.getE(E, z_0);
104 cout <<
"enter time (^C to exit) > " << flush;
106 for (
double dt; cin >> dt; ) {
108 for (vector<int>::const_iterator F = function.begin(); F != function.end(); ++F) {
110 cout << setw(2) << *F <<
' '
112 <<
FIXED(5,1) << R <<
' '
113 <<
FIXED(5,1) << z <<
' '
116 <<
FIXED(5,1) << dt <<
' '
127 const double t0 = 0.0;
131 if (function.size() == 1 && function[0] == DIRECT_LIGHT_FROM_MUON) {
149 if (E_0 >= MASS_MUON* (1.0/SIN_THETA_C_WATER)) {
151 if (z_0 >= 0 && z_0 <= gWater(E)) {
153 for (
int i = 1; i <= h0.GetNbinsX(); ++i) {
155 const double dt = h0.GetBinCenter(i) - t0;
159 for (vector<int>::const_iterator F = function.begin(); F != function.end(); ++F) {
163 h0.SetBinContent(i, value);
175 const double T_ns = 5;
179 const double t1 = quantiles.
getX();
180 const double y = f1(t1 + T_ns).v - f1(t1 - T_ns).v;
182 DEBUG(
"E " << E << endl);
183 DEBUG(
"E_0 " << E_0 << endl);
184 DEBUG(
"R " << R << endl);
185 DEBUG(
"z " << z << endl);
189 DEBUG(
"t1 " << t1 << endl);
190 DEBUG(
"max " << quantiles.
getY() << endl);
192 DEBUG(
"int[] " << y << endl);
194 catch(
const exception&) {}
Properties of Antares PMT and deep-sea water.
int main(int argc, char **argv)
General purpose messaging.
#define DEBUG(A)
Message macros.
Utility class to parse command line options.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
I/O formatting auxiliaries.
Utility class to parse parameter values.
#define gmake_property(A)
macros to convert (template) parameter to JPropertiesElement object
Properties of KM3NeT PMT and deep-sea water.
Utility class to parse parameter values.
Data structure for angles in three dimensions.
double getTheta() const
Get theta angle.
double getPhi() const
Get phi angle.
Utility class to parse command line options.
Probability Density Functions of the time response of a PMT with an implementation of the JAbstractPM...
double getLightFromMuon(const int type, const double E_GeV, const double R_m, const double theta, const double phi, const double t_ns) const
Probability density function for light from muon.
static const JZero zero
Function object to assign zero value.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Auxiliary data structure for floating point format specification.
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
Auxiliary data structure to customize absorption length.
Auxiliary data structure to customize scattering length.
Auxiliary data structure to customize scattering probability.
Auxiliary data structure for floating point format specification.