Jpp test-rotations-old
the software that should make you happy
Loading...
Searching...
No Matches
JDrawPDF.cc File Reference

Auxiliary program to draw PDF of Cherenkov light from muon. More...

#include <string>
#include <iostream>
#include <iomanip>
#include "TROOT.h"
#include "TFile.h"
#include "TH1D.h"
#include "JPhysics/JPDF.hh"
#include "JPhysics/Antares.hh"
#include "JPhysics/KM3NeT.hh"
#include "JTools/JElement.hh"
#include "JTools/JFunction1D_t.hh"
#include "JTools/JQuantiles.hh"
#include "JTools/JAbstractHistogram.hh"
#include "JGeometry3D/JAngle3D.hh"
#include "Jeep/JProperties.hh"
#include "Jeep/JPrint.hh"
#include "Jeep/JParser.hh"
#include "Jeep/JMessage.hh"
#include "JPhysics/JGeane.hh"

Go to the source code of this file.

Functions

double getAbsorptionLength (const double lambda)
 
double getScatteringLength (const double lambda)
 
int main (int argc, char **argv)
 

Variables

double absorptionLengthFactor
 Scaling of absorption and scattering length.
 
double scatteringLengthFactor
 

Detailed Description

Auxiliary program to draw PDF of Cherenkov light from muon.

Author
mdejong, bofearraigh

Definition in file JDrawPDF.cc.

Function Documentation

◆ getAbsorptionLength()

double getAbsorptionLength ( const double lambda)
inline

Definition at line 31 of file JDrawPDF.cc.

32{
33 return absorptionLengthFactor * NAMESPACE::getAbsorptionLength(lambda);
34}
double absorptionLengthFactor
Scaling of absorption and scattering length.
Definition JDrawPDF.cc:28

◆ getScatteringLength()

double getScatteringLength ( const double lambda)
inline

Definition at line 37 of file JDrawPDF.cc.

38{
39 return scatteringLengthFactor * NAMESPACE::getScatteringLength(lambda);
40}
double scatteringLengthFactor
Definition JDrawPDF.cc:29

◆ main()

int main ( int argc,
char ** argv )

Definition at line 49 of file JDrawPDF.cc.

50{
51 using namespace std;
52 using namespace JPP;
53
55
56 string outputFile;
58 double epsilon;
59 double E;
60 double R;
61 double z;
62 JAngle3D dir;
63 vector<int> function;
64 JHistogram_t histogram;
65 int debug;
66
67 try {
68
69 JProperties properties;
70
71 properties.insert(gmake_property(JPHYSICS::MODULE_RADIUS_M));
72
73 JParser<> zap("Auxiliary program to draw PDF of Cherenkov light from muon.");
74
75 zap['@'] = make_field(properties) = JPARSER::initialised();
76 zap['o'] = make_field(outputFile) = "";
77 zap['n'] = make_field(numberOfPoints, "points for integration") = 25;
78 zap['e'] = make_field(epsilon, "precision for integration") = 1.0e-10;
79 zap['A'] = make_field(absorptionLengthFactor, "scaling factor") = 1.0;
80 zap['S'] = make_field(scatteringLengthFactor, "scaling factor") = 1.0;
81 zap['E'] = make_field(E, "muon energy at vertex [GeV]")= 1.0;
82 zap['R'] = make_field(R, "distance of approach [m]");
83 zap['z'] = make_field(z, "PMT z-position [m]");
84 zap['D'] = make_field(dir, "(theta, phi) of PMT [rad]");
85 zap['F'] = make_field(function, "PDF type");
86 zap['H'] = make_field(histogram, "histogram binning") = JHistogram_t();
87 zap['d'] = make_field(debug) = 0;
88
89 zap(argc, argv);
90 }
91 catch(const exception &error) {
92 FATAL(error.what() << endl);
93 }
94
95
96 const JPDF_C
97 pdf(NAMESPACE::getPhotocathodeArea(),
98 NAMESPACE::getQE,
99 NAMESPACE::getAngularAcceptance,
102 NAMESPACE::getScatteringProbability,
103 NAMESPACE::getAmbientPressure(),
107 epsilon);
108
109 const double z_emission = z - R/getTanThetaC(); // emission point z-position
110 const double E_emission = gWater.getE(E, z_emission ); // Get energy of muon at emission point
111
112 if (outputFile == "") {
113
114 for (double dt; cin >> dt; ) {
115
116 for (vector<int>::const_iterator F = function.begin(); F != function.end(); ++F) {
117
118 cout << setw(2) << *F << ' '
119 << SCIENTIFIC(7,1) << E << ' '
120 << FIXED(5,1) << R << ' '
121 << FIXED(5,1) << z << ' '
122 << FIXED(5,2) << dir.getTheta() << ' '
123 << FIXED(5,2) << dir.getPhi() << ' '
124 << FIXED(5,1) << dt << ' '
125 << SCIENTIFIC(9,3) << pdf.getLightFromMuon(*F, E_emission, R, dir.getTheta(), dir.getPhi(), dt) * E_emission << endl;
126 }
127 }
128
129 return 0;
130 }
131
132
133 TFile out(outputFile.c_str(), "recreate");
134
135 const double t0 = 0.0; // time [ns]
136
137 if (!histogram.is_valid()) {
138
139 if (function.size() == 1 && function[0] == DIRECT_LIGHT_FROM_MUON) {
140
141 histogram = JHistogram_t(t0 - 20.0, t0 + 50.0);
142
143 histogram.setBinWidth(0.1);
144
145 } else {
146
147 histogram = JHistogram_t(t0 - 20.0, t0 + 500.0);
148
149 histogram.setBinWidth(0.5);
150 }
151 }
152
153 TH1D h0("h0", NULL, histogram.getNumberOfBins(), histogram.getLowerLimit(), histogram.getUpperLimit());
154
156
157 if ( E_emission > MASS_MUON* (1/COS_THETA_C_WATER) ) { // muon emission energy has to be above Cherenkov threshold
158
159 if (z_emission >= 0 && z_emission <= gWater(E)) { // emission point is between start and end point of muon
160 for (int i = 1; i <= h0.GetNbinsX(); ++i) {
161
162 const double dt = h0.GetBinCenter(i) - t0;
163
164 double value = 0.0;
165
166 for (vector<int>::const_iterator F = function.begin(); F != function.end(); ++F) {
167 value += pdf.getLightFromMuon(*F, E_emission, R, dir.getTheta(), dir.getPhi(), dt);
168 }
169
170 h0.SetBinContent(i, value);
171
172 f1[dt] = value;
173 }
174 }
175 }
176
177 f1.setExceptionHandler(new JSplineFunction1S_t::JDefaultResult(JMATH::zero));
178 f1.compile();
179
180 try {
181
182 const double T_ns = 5; // [ns]
183
184 JQuantiles quantiles(f1);
185
186 const double t1 = quantiles.getX();
187 const double y = f1(t1 + T_ns).v - f1(t1 - T_ns).v;
188
189 DEBUG("E " << E << endl);
190 DEBUG("E_emission" << E_emission << endl);
191 DEBUG("R " << R << endl);
192 DEBUG("z " << z << endl);
193 DEBUG("theta " << dir.getTheta() << endl);
194 DEBUG("phi " << dir.getPhi() << endl);
195 DEBUG("int " << quantiles.getIntegral() << endl);
196 DEBUG("t1 " << t1 << endl);
197 DEBUG("max " << quantiles.getY() << endl);
198 DEBUG("FWHM " << quantiles.getFWHM() << endl);
199 DEBUG("int[] " << y << endl);
200 }
201 catch(const exception&) {}
202
203 out.Write();
204 out.Close();
205}
string outputFile
double getAbsorptionLength(const double lambda)
Definition JDrawPDF.cc:31
double getScatteringLength(const double lambda)
Definition JDrawPDF.cc:37
#define DEBUG(A)
Message macros.
Definition JMessage.hh:62
#define FATAL(A)
Definition JMessage.hh:67
int debug
debug level
Definition JSirene.cc:72
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition JParser.hh:2142
#define gmake_property(A)
macros to convert (template) parameter to JPropertiesElement object
int numberOfPoints
Definition JResultPDF.cc:22
Utility class to parse parameter values.
Data structure for angles in three dimensions.
Definition JAngle3D.hh:35
double getTheta() const
Get theta angle.
Definition JAngle3D.hh:86
double getPhi() const
Get phi angle.
Definition JAngle3D.hh:97
Utility class to parse command line options.
Definition JParser.hh:1698
Probability Density Functions of the time response of a PMT with an implementation of the JAbstractPM...
Definition JPDF.hh:2185
Quantile calculator for a given function.
T getLowerLimit() const
Get lower limit.
Definition JRange.hh:202
T getUpperLimit() const
Get upper limit.
Definition JRange.hh:213
const JPolynome f1(1.0, 2.0, 3.0)
Function.
const double epsilon
static const JZero zero
Function object to assign zero value.
Definition JZero.hh:105
static double MODULE_RADIUS_M
Radius of optical module [m].
Definition JPDF.hh:40
double getMinimalWavelength()
Get minimal wavelength for PDF evaluations.
double getMaximalWavelength()
Get maximal wavelength for PDF evaluations.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Auxiliary data structure for floating point format specification.
Definition JManip.hh:448
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
Definition JParser.hh:68
Simple data structure for histogram binning.
void setBinWidth(const abscissa_type dx, int option=0)
Set bin width.
bool is_valid() const
Check validity of histogram binning.
int getNumberOfBins() const
Get number of bins.
Type definition of a spline interpolation method based on a JCollection with JResultPDF result type.
Auxiliary data structure for floating point format specification.
Definition JManip.hh:488

Variable Documentation

◆ absorptionLengthFactor

double absorptionLengthFactor

Scaling of absorption and scattering length.

Definition at line 28 of file JDrawPDF.cc.

◆ scatteringLengthFactor

double scatteringLengthFactor

Definition at line 29 of file JDrawPDF.cc.