Jpp  18.2.1
the software that should make you happy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Classes | Typedefs | Functions
JDrawLED.cc File Reference

Example program to draw PDF from LED beacon. More...

#include <string>
#include <iostream>
#include <iomanip>
#include "TROOT.h"
#include "TFile.h"
#include "TH1D.h"
#include "Jeep/JParser.hh"
#include "Jeep/JMessage.hh"
#include "JPhysics/JLED.hh"
#include "JPhysics/JPDFToolkit.hh"
#include "JPhysics/Antares.hh"
#include "JPhysics/KM3NeT.hh"
#include "JTools/JSpline.hh"
#include "JTools/JQuantiles.hh"
#include "JTools/JToolsToolkit.hh"

Go to the source code of this file.

Classes

class  LED
 Light yield from LED (number of p.e. More...
 

Typedefs

typedef std::pair< double, double > orientation
 

Functions

std::istream & operator>> (std::istream &in, orientation &x)
 
std::ostream & operator<< (std::ostream &out, const orientation &x)
 
double getAngularAcceptance (const double x)
 Angular acceptence of PMT. More...
 
int main (int argc, char **argv)
 

Detailed Description

Example program to draw PDF from LED beacon.

Author
mdejong

Definition in file JDrawLED.cc.

Typedef Documentation

typedef std::pair<double,double> orientation

Definition at line 22 of file JDrawLED.cc.

Function Documentation

std::istream& operator>> ( std::istream &  in,
orientation x 
)

Definition at line 24 of file JDrawLED.cc.

24 { return in >> x.first >> x.second; }
then fatal Wrong number of arguments fi set_variable DETECTOR $argv[1] set_variable INPUT_FILE $argv[2] eval JPrintDetector a $DETECTOR O IDENTIFIER eval JPrintDetector a $DETECTOR O SUMMARY JAcoustics sh $DETECTOR_ID source JAcousticsToolkit sh CHECK_EXIT_CODE typeset A EMITTERS get_tripods $WORKDIR tripod txt EMITTERS get_transmitters $WORKDIR transmitter txt EMITTERS for EMITTER in
Definition: JCanberra.sh:46
std::ostream& operator<< ( std::ostream &  out,
const orientation x 
)

Definition at line 25 of file JDrawLED.cc.

25 { return out << x.first << ' ' << x.second; }
double getAngularAcceptance ( const double  x)
inline

Angular acceptence of PMT.

Parameters
xcosine of angle of incidence
Returns
probability

Definition at line 68 of file JDrawLED.cc.

69 {
71 }
double getAngularAcceptance(const double x)
Get angular acceptance of PMT.
Definition: Antares.hh:281
int main ( int  argc,
char **  argv 
)

Definition at line 80 of file JDrawLED.cc.

81 {
82  using namespace std;
83 
84  string outputFile;
85  int numberOfPoints;
86  int number_of_points;
87  double epsilon;
88  double D;
89  double ct;
90  orientation dir;
91  double wavelength;
92  double absorptionLength;
93  double scatteringLength;
94  int debug;
95 
96  try {
97 
98  JParser<> zap("Example program to draw PDF from LED beacon.");
99 
100  zap['o'] = make_field(outputFile) = "led.root";
101  zap['n'] = make_field(numberOfPoints) = 25;
102  zap['N'] = make_field(number_of_points) = 25;
103  zap['e'] = make_field(epsilon) = 1.0e-10;
104  zap['A'] = make_field(absorptionLength) = 50.0;
105  zap['S'] = make_field(scatteringLength) = 50.0;
106  zap['R'] = make_field(D);
107  zap['c'] = make_field(ct);
108  zap['D'] = make_field(dir);
109  zap['w'] = make_field(wavelength) = 470;
110  zap['d'] = make_field(debug) = 2;
111 
112  zap(argc, argv);
113  }
114  catch(const exception &error) {
115  FATAL(error.what() << endl);
116  }
117 
118 
119  const double theta = dir.first;
120  const double phi = dir.second;
121 
122  using namespace JPP;
123 
124  // set global parameters
125 
126  const double P_atm = 240.0; // ambient pressure [Atm]
127  const double tmin = -10.0; // minimal time of emission [ns]
128  const double tmax = +10.0; // maximal time of emission [ns]
129  const double A = 440e-4; // ANTARES photo-cathode area [m2]
130  const double R_Hz = 0.0e3; // singles rate [Hz]
131 
132  const JDispersion dispersion(P_atm);
133 
134  //const double ng = dispersion.getIndexOfRefractionGroup(wavelength);
135  const double lm = scatteringLength / 0.83;
136  const double lr = scatteringLength / 0.17;
137 
138  const double cs = 0.83 * 0.92; // average cosine scattering angle
139 
140  const double l_abs = absorptionLength;
141  const double ls = scatteringLength;
142  const double l_att = l_abs * lr / (l_abs + lr);
143 
144 
145  LED* led = new LED();
146 
147  cout << "Rayleigh scattering length " << lr << " m" << endl;
148  cout << "Mie scattering length " << lm << " m" << endl;
149  cout << "Absorption length " << l_abs << " m" << endl;
150 
151  const JLED_C
152  pdfMie(A,
153  led,
156  l_abs,
157  lm,
159  P_atm,
160  wavelength,
161  tmin,
162  tmax,
163  JCotangent(number_of_points),
165  epsilon);
166 
167 
168  const JLED_C
169  pdfRayleigh(A,
170  led,
173  l_att,
174  lr,
175  rayleigh,
176  P_atm,
177  wavelength,
178  tmin,
179  tmax,
180  JCotangent(number_of_points),
182  epsilon);
183 
184 
185  TFile out(outputFile.c_str(), "recreate");
186 
187  TH1D h0("h0", NULL, 430, -15.0, +200.0);
188  TH1D h1("h1", NULL, 430, -15.0, +200.0);
189  TH1D h2("h2", NULL, 430, -15.0, +200.0);
190  TH1D h3("h3", NULL, 430, -15.0, +200.0);
191  TH1D ha("ha", NULL, 430, -15.0, +200.0);
192 
193  JSplineFunction1S_t f[4];
194  JSplineFunction1S_t f1;
195 
196 
197  for (int i = 1; i <= h1.GetNbinsX(); ++i) {
198 
199  const double t1 = h1.GetBinCenter(i);
200 
201  const double F1 = pdfMie .getDirectLightFromLED (D, ct, theta, phi, t1);
202  const double F2 = pdfMie .getScatteredLightFromLED(D, ct, theta, phi, t1);
203  const double F3 = pdfRayleigh.getScatteredLightFromLED(D, ct, theta, phi, t1);
204 
205 
206  h0.SetBinContent(i, F1 + F2 + F3);
207  h1.SetBinContent(i, F1);
208  h2.SetBinContent(i, F2);
209  h3.SetBinContent(i, F3);
210 
211  f[0][t1] = F1;
212  f[1][t1] = F2;
213  f[2][t1] = F3;
214  f[3][t1] = F1 + F2 + F3;
215 
216  f1[t1] = F1 + F2 + F3;
217  }
218 
219  f1.compile();
220 
221  for (int i = 3; i != sizeof(f)/sizeof(f[0]); ++i) {
222 
223  f[i].compile();
224 
225  JQuantiles quantiles(f[i]);
226 
227 
228  const double lz = l_abs * ls / (l_abs*(1.0-cs) + ls);
229 
230  NOTICE("int " << quantiles.getIntegral() * D*D * exp(D/lz) << endl);
231 
232  DEBUG("D " << D << endl);
233  DEBUG("ct " << ct << endl);
234  DEBUG("theta " << theta << endl);
235  DEBUG("phi " << phi << endl);
236  DEBUG("int " << quantiles.getIntegral() << endl);
237  DEBUG("t1 " << quantiles.getX() << endl);
238  DEBUG("max " << quantiles.getY() << endl);
239  DEBUG("FWHM " << quantiles.getFWHM() << endl);
240  }
241 
242 
243  const double Tmin = ha.GetXaxis()->GetXmin();
244  const double Tmax = ha.GetXaxis()->GetXmax();
245 
246  const double V = f1.rbegin()->getIntegral() + R_Hz * 1e-9 * (Tmax - Tmin); // integral [Tmin,Tmax]
247 
248  for (int i = 1; i <= ha.GetNbinsX(); ++i) {
249 
250  const double t1 = ha.GetBinCenter(i);
251 
252  JSplineFunction1S_t::result_type p = f1(t1);
253 
254  double v = p.v + R_Hz * 1e-9 * (t1 - Tmin);
255  double y = p.f + R_Hz * 1e-9; // function value
256 
257  const double W = exp(-v) * y / (1.0 - exp(-V));
258 
259  ha.SetBinContent(i,W);
260  }
261 
262  delete led;
263 
264  out.Write();
265  out.Close();
266 }
const JPolynome F1
Integral.
Definition: JQuadrature.cc:34
Utility class to parse command line options.
Definition: JParser.hh:1514
double getQE(const double lambda, const bool option)
Get quantum efficiency of PMT.
Definition: Antares.hh:294
o $QUALITY_ROOT d $DEBUG!CHECK_EXIT_CODE JPlot1D f
Definition: JDataQuality.sh:76
double rayleigh(const double a, const double x)
Auxiliary method to describe light scattering in water (Rayleigh).
V(JDAQEvent-JTriggerReprocessor)*1.0/(JDAQEvent+1.0e-10)
string outputFile
Light yield from LED (number of p.e.
Definition: JDrawLED.cc:31
const JPolynome f1(1.0, 2.0, 3.0)
Function.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition: JParser.hh:1989
#define NOTICE(A)
Definition: JMessage.hh:64
double getIntegral(const double x) const
Integral value.
Definition: JPolynome.hh:276
#define FATAL(A)
Definition: JMessage.hh:67
int numberOfPoints
Definition: JResultPDF.cc:22
double henyey_greenstein(const double g, const double x)
Auxiliary method to describe light scattering in water (Henyey-Greenstein).
data_type v[N+1][M+1]
Definition: JPolint.hh:866
source $JPP_DIR setenv csh $JPP_DIR &dev null eval JShellParser o a A
do echo Generating $dir eval D
Definition: JDrawLED.sh:53
then fatal Wrong number of arguments fi set_variable DETECTOR $argv[1] set_variable STRING $argv[2] set_array QUANTILES set_variable FORMULA *[0] exp(-0.5 *(x-[1])*(x-[1])/([2]*[2]))" set_variable MODULE `getModule -a $DETECTOR -L "$STRING 0"` source JAcousticsToolkit.sh typeset -A TRIPODS get_tripods $WORKDIR/tripod.txt TRIPODS XMEAN
const double epsilon
Definition: JQuadrature.cc:21
int debug
debug level
#define DEBUG(A)
Message macros.
Definition: JMessage.hh:62
double getAngularAcceptance(const double x)
Angular acceptence of PMT.
Definition: JDrawLED.cc:68